综合小案例3.2、Safari等

发布时间:2025-06-24 19:18:49  作者:北方职教升学中心  阅读量:644


复制在Edge的快捷方式,并在其上右击,选择属性,在目标栏后面加上空格加上下面命令

“C:Program Files (x86)MicrosoftEdgeApplicationmsedge.exe”–remote-debugging-port=9222 --user-data-dir=“你的用户数据目录路径”

from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsoptions = Options()options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")driver = webdriver.Edge(options=options)
4.1.3、

selenium模拟验证码登入超级鹰专业验证码识别平台案例:

"""@Author :江上挽风&sty@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064@File :验证码@Time :2024/12/6 16:13@Motto:一直努力,一直奋进,保持平常心"""import jsonimport timefrom selenium import webdriverfrom selenium.webdriver.edge.service import Servicefrom selenium.webdriver.common.by import Byfrom chaojiying_Python import chaojiyingfrom chaojiying_Python.chaojiying import Chaojiying_Clientservice = Service(executable_path='D:ApplicationsSoftwareEdgeDriveredgedriver_win32msedgedriver.exe')def login(url,password,username,soft_id):    browser = webdriver.Edge(service=service)    browser.get(url)    # 输入用户名    browser.find_element(by=By.XPATH, value='/html/body/div[3]/div/div[3]/div[1]/form/p[1]/input').send_keys(username)    # 输入密码    time.sleep(2)    browser.find_element(by=By.XPATH, value='/html/body/div[3]/div/div[3]/div[1]/form/p[2]/input').send_keys(password)    # 获取验证码    img = browser.find_element(by=By.XPATH, value='/html/body/div[3]/div/div[3]/div[1]/form/div/img').screenshot_as_png    time.sleep(2)    Chaojiying_Client(username,password,soft_id)    code = chaojiying.chaojiying.PostPic(img,1902)['pic_str']    # 输入验证码    browser.find_element(by=By.XPATH, value='/html/body/div[3]/div/div[3]/div[1]/form/p[3]/input').send_keys(code)    time.sleep(2)    # 点击登入    browser.find_element(by=By.XPATH, value='/html/body/div[3]/div/div[3]/div[1]/form/p[4]/input').click()if __name__ == '__main__':    url = "https://www.chaojiying.com/user/login/"    with open('chaojiying_Python/password.json','r',encoding='utf-8') as f:        info = json.loads(f.read())    password = info['password']    username = info['username']    soft_id = info['soft_id']    login(url, password, username, soft_id)

五、JavaScript等)都加载完成,直到触发load事件后才会继续执行后续的操作。下载对应版本的驱动程序

下载网址链接:Microsoft Edge WebDriver |Microsoft Edge 开发人员

2.2.3、动作链

在Selenium中,动作链(ActionChains)是一种用于执行复杂用户交互的方法,比如鼠标移动、综合小案例

"""@Author :江上挽风&sty@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064@File :Selenium爬虫@Time :2024/12/5 11:19@Motto:一直努力,一直奋进,保持平常心"""import timefrom selenium import webdriverfrom selenium.webdriver.edge.service import Servicefrom selenium.webdriver.edge.options import Optionsurl = "https://www.baidu.com/"url1 = "https://www.jd.com/"# Service类用于设置WebDriver服务,这里指定了Edge浏览器驱动程序的路径service = Service(executable_path='D:ApplicationsSoftwareEdgeDriveredgedriver_win32msedgedriver.exe')opt = Options()opt.add_argument("--disable-blink-features=AutomationControlled")# 使用上面定义的服务对象来创建一个Edge浏览器的WebDriver对象,这个对象可以模拟浏览器操作browser = webdriver.Edge(service=service,options=opt)# 调用maximize_window方法,使浏览器窗口最大化显示browser.maximize_window()# 设置浏览器的窗口位置# browser.set_window_position(1100, 20)# 设置浏览器的窗口大小# browser.set_window_size(900, 900)# 使用get方法通过url打开指定的网页browser.get(url)# time模块的sleep函数用于暂停程序执行,这里暂停5秒,以便有足够的时间观察网页加载情况time.sleep(2)# 通过url访问另一个网页browser.get(url1)time.sleep(2)# 调用back返回上一个网页browser.back()time.sleep(2)# 调用forward()函数前往下一个网页browser.forward()time.sleep(1)# 刷新页面browser.refresh()time.sleep(1)# 调用page_source获取网页内容page_content = browser.page_sourceprint(page_content)# 最后,调用close方法关闭浏览器窗口browser.close()

3.2、Firefox、模拟鼠标的基本操作

首先,我们需要引入Keys类。它提供了更灵活的控制,可以等待特定的元素出现、

“”"
@Author :江上挽风&sty
@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064
@File :切换表单
@Time :2024/12/6 13:41
@Motto:一直努力,一直奋进,保持平常心

“”"
import time

from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.edge.options import Options
from selenium.webdriver.common.by import By

url = “https://www.qidian.com/all/”

Service类用于设置WebDriver服务,这里指定了Edge浏览器驱动程序的路径

service = Service(executable_path=‘D:ApplicationsSoftwareEdgeDriveredgedriver_win32msedgedriver.exe’)
opt = Options()
opt.add_argument(“–disable-blink-features=AutomationControlled”)

使用上面定义的服务对象来创建一个Edge浏览器的WebDriver对象,这个对象可以模拟浏览器操作

browser = webdriver.Edge(service=service, options=opt)

调用maximize_window方法,使浏览器窗口最大化显示

browser.maximize_window()
browser.get(url)

显式等待五秒,加载页面

browser.implicitly_wait(5)

time.sleep(3)
login_button = browser.find_element(by=By.XPATH, value=‘//*[@id=“login-btn”]’)
login_button.click()
time.sleep(3)

先获取表单所在的iframe元素

iframe = browser.find_element(by=By.XPATH, value=‘//*[@id=“loginIfr”]’)

进入这个表单

browser.switch_to.frame(iframe)
time.sleep(3)
browser.find_element(by=By.XPATH, value=‘//[@id=“username”]‘).send_keys(‘17369961234’)
time.sleep(3)
browser.find_element(by=By.XPATH, value=’//
[@id=“password”]’).send_keys(‘skjhg’)
time.sleep(3)
browser.find_element(by=By.XPATH, value=‘//[@id=“j-inputMode”]/div[2]/div/label[2]‘).click()
time.sleep(2)
browser.find_element(by=By.XPATH, value=’//
[@id=“j-loginInputMode”]/div[3]/div[1]/p[2]/label’).click()
time.sleep(2)
browser.find_element(by=By.XPATH, value=‘//*[@id=“j-inputMode”]/div[2]/a’).click()
time.sleep(2)
browser.switch_to.default_content()
time.sleep(2)

3.2.6、

安装undetected_edgedriver:

pip3 install undetected-edgedriver

使用方法:

import undetected_edgedriver as uc# 创建Edge浏览器实例browser = uc.Edge(use_subprocess=True)# 打开网页browser.get(url="https://your-target-website.com/")# 执行其他操作,例如查找元素、下面包含常用的显式等待方法:

"""@Author :江上挽风&sty@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064@File :练习@Time :2024/12/5 13:57@Motto:一直努力,一直奋进,保持平常心"""import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys# 导入显式等待库from selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC# 初始化Edge浏览器driver = webdriver.Edge()driver.get("https://www.baidu.com/")# 调用maximize_window方法,使浏览器窗口最大化显示driver.maximize_window()# 设置显式等待,最多等待10秒wait = WebDriverWait(driver, 10)try:    # 等待直到某个元素出现    element = wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id='kw']")))except:    print("未找到元素")    driver.close()    exit()# 获取页面元素search_element = driver.find_element(by=By.XPATH,value="//*[@id='kw']")# 模拟向输入框中输入python爬虫并回车search_element.send_keys('python爬虫', Keys.ENTER)time.sleep(10)driver.close()

**隐式等待:**隐式等待设置了一个全局等待时间,在这个时间内,WebDriver会等待某个元素出现。解压获取exe文件地址

三、

  • 完成frame/iframe内的操作后,可以通过switch_to.default_content()切换回主文档,或者使用switch_to.parent_frame()切换到父级frame。

    • 查询该用户是否还有剩余的题分

    • 创建一个软件:用户中心>软件ID>生成一个软件ID>录入软件名称>提交(软件id和秘钥)

    • 下载示例代码:开发文档>点此下载python示例

    • 示例代码:

      #!/usr/bin/env python

      coding:utf-8

      import json

      import requests
      from hashlib import md5

      class Chaojiying_Client(object):

      def __init__(self, username, password, soft_id):    self.username = username    password =  password.encode('utf8')    self.password = md5(password).hexdigest()    self.soft_id = soft_id    self.base_params = {        'user': self.username,        'pass2': self.password,        'softid': self.soft_id,    }    self.headers = {        'Connection': 'Keep-Alive',        'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',    }def PostPic(self, im, codetype):    """    im: 图片字节    codetype: 题目类型 参考 http://www.chaojiying.com/price.html    """    params = {        'codetype': codetype,    }    params.update(self.base_params)    files = {'userfile': ('ccc.jpg', im)}    r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)    return r.json()def PostPic_base64(self, base64_str, codetype):    """    im: 图片字节    codetype: 题目类型 参考 http://www.chaojiying.com/price.html    """    params = {        'codetype': codetype,        'file_base64':base64_str    }    params.update(self.base_params)    r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, headers=self.headers)    return r.json()def ReportError(self, im_id):    """    im_id:报错题目的图片ID    """    params = {        'id': im_id,    }    params.update(self.base_params)    r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)    return r.json()

      if name== ‘main’:
      with open(‘password.json’,‘r’,encoding=‘utf-8’) as f:
      info = json.loads(f.read())
      password = info[‘password’]
      username = info[‘username’]
      soft_id = info[‘soft_id’]
      print(username)

      chaojiying = Chaojiying_Client(username, password, soft_id)	#用户中心>>软件ID 生成一个替换 96001im = open('a.jpg', 'rb').read()code = chaojiying.PostPic(im,1902)print(code)#本地图片文件路径 来替换 a.jpg 有时WIN系统须要//# print chaojiying.PostPic(im, 1902)# #1902 验证码类型  官方网站>>价格体系 3.4+版 print 后要加()#print chaojiying.PostPic(base64_str, 1902)  #此处为传入 base64代码

    只需要password.jsonw文件中替换自己的用户名、安装Selenium

  • 在终端通过pip安装:

    1|pip install selenium

    2.2、JavaScript或图像

    在Selenium中,设置WebDriver等待是一种重要的技术,用于确保在执行某些操作之前,页面上的元素已经加载完成或者某个条件已经满足。以下是Selenium中切换表单的一些关键点:

    1. Selenium提供了switch_to.frame()方法来切换到frameiframe。WebDriver是一个控制浏览器的工具,它可以模拟用户在浏览器中的各种操作。打开网页

    一旦我们初始化好了WebDriver,接下来我们就可以使用它来打开网页。综合小案例

    3.2、Safari等。使用debugging模式

    在Selenium中使用调试模式来防止检测,主要是指通过开启Chrome的远程调试端口来接管已经打开的浏览器会话,从而避免被网站检测到自动化工具的使用。使用undetected_edgedriver

    4.2、对页面元素进行操作

    3.2.1、在这种策略下,WebDriver会等待整个页面包括所有子资源(如图像、

    import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys# 初始化Edge浏览器driver = webdriver.Edge()# 设置隐式等待5秒钟driver.implicitly_wait(5)driver.get("https://www.baidu.com/")# 调用maximize_window方法,使浏览器窗口最大化显示driver.maximize_window()# 模拟点击百度页面链接进行跳转# 获取页面元素search_element = driver.find_element(by=By.XPATH,value="//*[@id='kw']")# 模拟向输入框中输入python爬虫并回车search_element.send_keys('python爬虫', Keys.ENTER)time.sleep(10)driver.close()
    3.2.4、这通常是通过Selenium的execute_cdp_cmd方法实现的,该方法允许执行Chrome DevTools Protocol命令。selenium简介

    二、对页面元素进行操作

    3.2.1、浏览器驱动安装

    三、以下是一些常用的Selenium反检测方法。反检测

    在使用Selenium进行自动化测试或爬虫时,网站可能会通过各种方式检测到自动化工具的使用。下面是一些示例代码,展示如何使用WebDriver打开网页:

    from selenium import webdriver# 初始化Edge浏览器driver = webdriver.Edge()driver.get("https://www.baidu.com/")driver.get("https://www.jd.com/")
    3.1.3、页面操作

    3.1.4、查看浏览器的版本

    2.2.2、基本操作

    3.1、使用debugging模式

    4.1.3、页面加载策略和延时等待

    3.2.4、点击按钮等# ...# 关闭浏览器browser.quit()

    4.2、

    import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keys# 初始化Edge浏览器driver = webdriver.Edge()driver.get("https://www.baidu.com/")# 调用maximize_window方法,使浏览器窗口最大化显示driver.maximize_window()# 模拟点击百度页面链接进行跳转# 获取页面元素search_element = driver.find_element(by=By.XPATH,value="//*[@id='kw']")# 模拟向输入框中输入python爬虫并回车search_element.send_keys('python爬虫', Keys.ENTER)time.sleep(10)

    基本操作:

    具体操作

    函数

    删除键

    send_keys(Keys.BACK_SPACE)

    空格键

    send_keys(Keys.SPACE)

    制表键

    send_keys(Keys.TAB)

    回退键

    send_keys(Keys.ESCAPE)

    回车

    send_keys(Keys.ENTER)

    全选

    send_keys(Keys.CONTRL,‘a’)

    复制

    send_keys(Keys.CONTRL,‘c’)

    剪切

    send_keys(Keys.CONTRL,‘x’)

    粘贴

    send_keys(Keys.CONTRL,‘x’)

    键盘F1

    send_keys(Keys.F1)

    3.2.3、而在需要完全加载所有资源以确保页面功能正常的测试中,使用normal策略可能更合适以下是Selenium支持的页面加载策略:

    页面加载策略

    特点

    normal

    这是默认的页面加载策略。

    下载安装stealth.min.js文件:

    4.1.2、高级操作

    4.1、图片验证码

    五、

    **显式等待:**显式等待允许你等待某个条件成立,而不是盲目地等待一个固定的时间。Chrome和Firefox浏览器的WebDriver:

    from selenium import webdriver# 初始化Edge浏览器driver = webdriver.Edge()# 初始化Chrome浏览器driver = webdriver.Chrome()# 初始化Firefox浏览器driver = webdriver.Firefox()

    3.1.2、点击、这意味着WebDriver不会等待任何额外的资源加载,如CSS、

    4.1.1、设置窗口位置、元素变得可点击、动作链允许你将多个操作按顺序存放在一个队列里,当你调用perform()方法时,这些操作会依次执行。这通常意味着WebDriver会等待DOMContentLoaded事件触发后继续执行,这比load事件更早

    none

    使用none策略时,WebDriver不会等待页面加载完成,它仅等待初始的HTML被部分下载后就会停止等待,允许脚本继续执行。切换窗口

    3.2.5、

    from selenium import webdriverfrom selenium.webdriver.common.by import By# 初始化Edge浏览器driver = webdriver.Edge()driver.get("https://www.baidu.com/")# 调用maximize_window方法,使浏览器窗口最大化显示driver.maximize_window()# 模拟点击百度页面链接进行跳转# 获取页面元素link = driver.find_element(by=By.XPATH,value="//*[@id='hotsearch-content-wrapper']/li[1]/a/span[2]")# 链接跳转link.click()

    我们在实际使用浏览器的时候,很重要的操作有输入文本、基本操作

    3.1、本文将提供一个超级详细的Selenium教程,以帮助您快速入门并了解其各种功能和用法。找到Edge浏览器的安装路径:

    C:Program Files (x86)MicrosoftEdgeApplication

    2、拖放和键盘输入等。环境安装

    2.1、浏览器驱动安装

    针对不同的浏览器,安装不同的驱动:(本文以Edge浏览器为例)

    2.2.1、

    目录

    一、对页面进行操作

    3.1.1、除了用于爬虫,Selenium还可以用于测试,尤其是在处理动态加载页面时非常有用。设置窗口大小等。结语

    本博客为自学python爬虫的过程贴,内容上可能存在些许错误,希望大家批评指正,后续我将努力完善修改,散花!

    常用方法:

    方法

    解释

    click(on_element=None)

    单击鼠标左键

    click_and_hold(on_element=None)

    点击鼠标左键并保持按下状态

    context_click(on_element=None)

    执行鼠标右键点击(上下文菜单)

    double_click(on_element=None)

    双击鼠标左键

    drag_and_drop(source, target)

    将一个元素拖拽到另一个元素上释放

    drag_and_drop_by_offset(source, xoffset, yoffset)

    将源元素拖动到指定的偏移位置上释放

    key_down(value, element=None)

    按下键盘上的某个键,不释放

    key_up(value, element=None)

    释放键盘上的某个键

    move_by_offset(xoffset, yoffset)

    鼠标从当前位置移动到某个坐标

    move_to_element(to_element)

    鼠标移动到某个元素

    move_to_element_with_offset(to_element, xoffset, yoffset)

    移动到距某个元素多少距离的位置

    perform()

    执行链中的所有动作

    release(on_element=None)

    在某个元素位置松开鼠标左键

    send_keys(*keys_to_send)

    发送某个键到当前焦点的元素

    send_keys_to_element(element, *keys_to_send)

    发送某个键到指定元素

    """@Author :江上挽风&sty@Blog(个人博客地址):https://blog.csdn.net/weixin_56097064@File :动作链@Time :2024/12/6 14:11@Motto:一直努力,一直奋进,保持平常心"""import timefrom selenium import webdriverfrom selenium.webdriver.edge.service import Servicefrom selenium.webdriver.edge.options import Optionsfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.select import Selecturl = "https://www.12306.cn/index/index.html"# Service类用于设置WebDriver服务,这里指定了Edge浏览器驱动程序的路径service = Service(executable_path='D:ApplicationsSoftwareEdgeDriveredgedriver_win32msedgedriver.exe')opt = Options()# 防止Edge在自动化测试过程中弹出一些对话框opt.add_argument("--disable-blink-features=AutomationControlled")# 使用add_experimental_option方法可以添加一些实验性的Edge选项opt.add_experimental_option('excludeSwitches', ['enable-automation'])# 的作用是让浏览器在WebDriver会话结束后保持开启状态opt.add_experimental_option("detach", True)# 使用上面定义的服务对象来创建一个Edge浏览器的WebDriver对象,这个对象可以模拟浏览器操作browser = webdriver.Edge(service=service, options=opt)# 显式等待五秒,加载页面browser.implicitly_wait(5)# 调用maximize_window方法,使浏览器窗口最大化显示browser.maximize_window()browser.get(url)time.sleep(1)# 将鼠标悬停在车票上ticket_element = browser.find_element(by=By.XPATH, value='//*[@id="J-chepiao"]/a')ActionChains(browser).move_to_element(ticket_element).perform()time.sleep(2)# 点击单程进入下一个页面one_way_element = browser.find_element(by=By.XPATH, value='//*[@id="megamenu-3"]/div[1]/ul/li[1]/a')ActionChains(browser).click(one_way_element).perform()# 输入出发地time.sleep(2)from_station = browser.find_element(by=By.XPATH, value='//*[@id="fromStationText"]')ActionChains(browser).click(from_station).pause(1).send_keys('重庆').pause(1).send_keys(Keys.ARROW_DOWN).pause(1).send_keys(Keys.ENTER).perform()time.sleep(2)# 输入目的地to_station = browser.find_element(by=By.XPATH, value='//*[@id="toStationText"]')ActionChains(browser).click(to_station).pause(1).send_keys('长沙').pause(1).send_keys(Keys.ENTER).perform()time.sleep(2)# 输入出发日期date = browser.find_element(by=By.XPATH, value='//*[@id="place_area"]/ul/li[4]/span')ActionChains(browser).click(date).pause(1).send_keys(Keys.CLEAR).pause(1).send_keys("2024-12-06").pause(1).send_keys(Keys.ARROW_DOWN).pause(1).send_keys(Keys.ENTER).perform()time.sleep(2)# 选择学生browser.find_element(by=By.XPATH, value='//*[@id="sf2_label"]').click()time.sleep(2)# 勾线高铁browser.find_element(by=By.XPATH, value='//*[@id="_ul_station_train_code"]/li[1]/label').click()time.sleep(1)# 选择发车时间start_time_element = browser.find_element(by=By.XPATH, value='//*[@id="cc_start_time"]')Select(start_time_element).select_by_visible_text('12:00--18:00')# 单击查询browser.find_element(by=By.XPATH, value='//*[@id="query_ticket"]').click()time.sleep(3)

    四、高级操作

    4.1、打开网页

    3.1.3、安装Selenium

    2.2、页面操作

    一旦我们打开了网页,我们就可以使用WebDriver来模拟各种用户操作,如设置窗口最大化、这意味着WebDriver会等待页面完全加载,包括所有的外部资源加载完成

    eager

    eager策略下,WebDriver会等待文档被完全加载和解析完成,但不会等待样式表、初始化webdriver

    在使用Selenium之前,我们需要初始化WebDriver。获取页面链接元素

    3.2.2、例如,在单页应用中,由于页面内容是动态加载的,使用eagernone策略可能更合适,因为它们可以更快地响应页面的变化。使用undetected_edgedriver

    **undetected_edgedriver是一个基于undetected_chromedriver**进行一些调整以支持Edge浏览器的Selenium库。元素的可见性等。它旨在帮助自动化脚本更难被网站检测到,从而提高自动化任务的成功率。selenium简介

    Selenium是一个用于自动化测试的工具,它可以模拟用户在浏览器中的各种操作。页面数据提取

    3.1.5、图像和iframe等子资源加载完成。我们可以使用WebDriver的page_source来获取页面源代码,下面是示例代码,展示如何提取页面中的数据:

    import timefrom selenium import webdriver# 初始化Edge浏览器driver = webdriver.Edge()driver.get("https://www.baidu.com/")# 调用maximize_window方法,使浏览器窗口最大化显示driver.maximize_window()# 设置浏览器的窗口位置driver.set_window_position(1100, 20)# 设置浏览器的窗口大小driver.set_window_size(900, 900)time.sleep(5)# 获取页面源代码page_content = driver.page_source# 打印获取内容print(page_content)
    3.1.5、页面加载策略和延时等待

    页面加载策略是指在浏览器中加载网页时,Selenium WebDriver等待页面加载完成的行为。这个方法可以接受几种类型的参数,包括id、选择合适的页面加载策略可以显著影响测试的执行时间和稳定性。反检测

    4.1.1、图片验证码

    使用超级鹰打码平台识别验证码图片中的数据,用于模拟登陆操作。对页面进行操作

    3.1.1、关闭WebDriver将会关闭浏览器窗口,并释放相关的资源。对此,Selenium提供了一系列的方法来方便我们实现以上操作。index以及页面元素对象。CSS、

    步骤:

    1、模拟鼠标的基本操作

    3.2.3、下面是一些示例代码,展示如何在网页中进行一些常见的操作:

    import timefrom selenium import webdriver# 初始化Edge浏览器driver = webdriver.Edge()driver.get("https://www.baidu.com/")# 调用maximize_window方法,使浏览器窗口最大化显示driver.maximize_window()# 设置浏览器的窗口位置driver.set_window_position(1100, 20)# 设置浏览器的窗口大小driver.set_window_size(900, 900)time.sleep(5)
    3.1.4、如果在设置的时间内找到了元素,WebDriver会继续执行;如果超时,则抛出NoSuchElementException异常。页面数据提取

    除了操作页面,Selenium还可以用于提取页面的源代码。通过webdriver对象的 find_element(by=“属性名”, value=“属性值”),主要包括以下这八种:

    属性

    函数

    CLASS

    find_element(by=By.CLASS_NAME, value=‘’)

    XPATH

    find_element(by=By.XPATH, value=‘’)

    LINK_TEXT

    find_element(by=By.LINK_TEXT, value=‘’)

    CSS

    find_element(by=By.CSS_SELECTOR, value=‘’)

    ID

    find_element(by=By.ID, value=‘’)

    TAG

    find_element(by=By.TAG_NAME, value=‘’)

    PARTIAL_LINK_TEXT

    find_element(by=By.PARTIAL_LINK_TEXT, value=‘’)

    3.2.2、以下是Selenium中动作链的一些基本介绍和常用方法。关闭页面

    ?3.1.6、使用stealth.min.js文件

    4.1.2、

    from selenium.webdriver.common.keys import Keys

    其次,模型通过百度搜索python爬虫。环境安装

    2.1、在命令提示符下输入命令创建配置浏览器:

    msedge.exe --remote-debugging-port=9222 --user-data-dir=“你的用户数据目录路径”

    3、动作链

    四、点击确定等等。切换表单

    在Selenium中,处理表单切换是一个常见的任务,尤其是在涉及到frameiframe元素时。Selenium支持多种浏览器,如Chrome、

    • 打开一个新的页面并切换到新页面:switch_to.new_window(‘tab’)

    • 打开一个新的窗口并切换到新窗口:switch_to.new_window(‘window’)

      “”"
      @Author :江上挽风&sty
      @Blog(个人博客地址):https://blog.csdn.net/weixin_56097064
      @File :练习
      @Time :2024/12/5 13:57
      @Motto:一直努力,一直奋进,保持平常心

      “”"
      import time
      from selenium import webdriver
      from selenium.webdriver.common.by import By
      from selenium.webdriver.edge.service import Service
      from selenium.webdriver.edge.options import Options
      from selenium.webdriver.common.keys import Keys
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC

      Service类用于设置WebDriver服务,这里指定了Edge浏览器驱动程序的路径

      service = Service(executable_path=‘D:ApplicationsSoftwareEdgeDriveredgedriver_win32msedgedriver.exe’)
      opt = Options()
      opt.add_argument(“–disable-blink-features=AutomationControlled”)
      opt.page_load_strategy = ‘eager’

      初始化Edge浏览器

      driver = webdriver.Edge()
      driver.get(“https://www.readnovel.com/book/22312481000716402#Catalog”)

      调用maximize_window方法,使浏览器窗口最大化显示

      driver.maximize_window()
      time.sleep(3)
      locator = (By.XPATH, ‘//*[@id=“j-catalogWrap”]/div[2]/div[2]/ul/li/a’)
      WebDriverWait(driver, 5).until(EC.presence_of_all_elements_located(locator))

      //*[@id=“j-catalogWrap”]/div[2]/div[2]/ul/li[1]/a

      //*[@id=“j-catalogWrap”]/div[2]/div[2]/ul/li[14]/a

      //*[@id=“j-catalogWrap”]/div[2]/div[2]/ul/li[15]/a

      next_page = driver.find_elements(by=By.XPATH, value=“//*[@id=‘j-catalogWrap’]/div[2]/div[2]/ul/li/a”)

      for next in next_page:

      next.click()a = str(next.get_attribute('href').split("/")[-1])print(a)time.sleep(2)driver.execute_script('$(".lbf-panel-head").css("display","none")')driver.execute_script('$(".lbf-panel-body").css("display","none")')# link = driver.find_element(by=By.ID, value='//*[@id="j_closeGuide"]')# link.click()# locator1 = (By.XPATH, '//*[@id="chapter-95831384777767481"]/div/div[1]/h1')# locator1 = (By.XPATH, '//*[@id="chapter-95831384777833017"]/div/div[1]/h1')95831384777833017driver.switch_to.window(driver.window_handles[-1])# WebDriverWait(driver,20).until(EC.presence_of_element_located(locator1))time.sleep(5)# filename = driver.find_element(by=By.XPATH,value='//*[@id="chapter-id}]/div/div[1]/h1').textfilename = driver.find_element(by=By.XPATH, value=f'//*[@id="chapter-{a}"]/div/div[1]/h1').textcontent = driver.find_element(by=By.XPATH,value=f'//*[@id="chapter-{a}"]/div/div[2]/div').textwith open(f'D:ProjectCodeSpiderStudySpider07\{filename}.txt', 'w', encoding='utf-8') as f:    f.write(content)    print(f'已下载{filename}')    driver.switch_to.window(driver.window_handles[0])
    3.2.5、

    二、Selenium提供了两种主要的等待机制:显式等待(Explicit Wait)和隐式等待(Implicit Wait)。获取页面链接元素

    鼠标右键然后选择检查(或者按F12),获取页面的全部元素,然后选中元素,进行复制。在使用Selenium WebDriver时,可以在启动浏览器之前,通过执行stealth.min.js中的JavaScript代码来实现隐藏特征。初始化webdriver

    3.1.2、这些策略可以帮助我们控制WebDriver在页面加载时的行为,以适应不同的测试需求和性能优化。使用stealth.min.js文件

    stealth.min.js是一个JavaScript文件,它包含了一系列的代码,用于隐藏Selenium WebDriver的自动化特征,使得使用Selenium进行自动化测试时,浏览器的行为更接近于真实用户的浏览器行为,从而降低被网站检测为自动化工具的风险。关闭页面

    当我们完成了对网页的操作和数据提取后,最后不要忘记关闭WebDriver。下面是示例代码,展示如何关闭WebDriver:

    import timefrom selenium import webdriver# 初始化Edge浏览器driver = webdriver.Edge()driver.get("https://www.baidu.com/")# 调用maximize_window方法,使浏览器窗口最大化显示driver.maximize_window()time.sleep(2)# 获取页面数据page_content = driver.page_source# 打印页面数据内容print(page_content)# 关闭一个页面driver.close() # 关闭全部页面driver.quit()
    3.1.6、

  • 如果页面中有多层嵌套的frame/iframe,你可能需要多次调用switch_to.frame()方法来逐层深入,或者使用switch_to.parent_frame()来逐层返回。结语


    一、切换表单

    3.2.6、name、密码和ID即可。切换窗口

    在 selenium 操作页面的时候,可能会因为点击某个链接而跳转到一个新的页面(打开了一个新标签页),这时候 selenium 实际还是处于上一个页面的,需要我们进行切换才能够定位最新页面上的元素。下面是一些示例代码,展示如何初始化Edge、