Selenium使用教程
GuoJun 2023-09-14 Python
# selenium简介
selenium 本身是一套web自动化测试工具,但其经常被用于爬虫,解决一些复杂爬虫的问题。
selenium 用于爬虫时,相当于模拟人操作浏览器。
# 使用
# 安装驱动
下载本地浏览器对应驱动
配置都环境变量,并重启
# 基本使用
声明浏览对象
from selenium import webdriver def create_edge(self, headless=False): opt = webdriver.EdgeOptions() # 设置无界面 if headless: opt.add_argument('--headless') opt.add_argument("--disable-gpu") # 禁用gpu # 设置反爬 # 开启开发者模式 opt.add_experimental_option('excludeSwitches', ['enable-automation']) opt.add_experimental_option('useAutomationExtension', False) # 禁用启用Blink运行时的功能 opt.add_argument('--disable-blink-features=AutomationControlled') # 阻止自关 opt.add_experimental_option('detach', True) browser = webdriver.Edge(options=opt) # 执行js代码 browser.execute_cdp_cmd( 'Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver",{get: () => undefined})'} ) self.browser = browser return browser
访问页面
browser.get("https://www.baidu.com/") print(browser.title)
查找元素并交互
firefox_login.find_element_by_id('email').clear() firefox_login.find_element_by_id('email').send_keys('xxx@sina.com')
# 进阶操作
等待
- sleep(x)
强制等待,不管你浏览器是否加载完,程序都得等待3秒,3秒一到,继续执行下面的代码
from selenium import webdriver import time # 会开会话 driver = webdriver.Chrome() driver.get('http://www.baidu.com') # 强制等待3秒 time.sleep(3) print(driver.current_url) driver.quit()
- 隐示等待
隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步
from selenium import webdriver # 会开会话 driver = webdriver.Chrome() # 隐性等待,最长等待30秒 driver.implicitly_wait(30) driver.get('http://www.baidu.com') print(driver.current_url) driver.quit()
- 显示等待
程序每隔x秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By # 会开会话 driver = webdriver.Chrome() driver.get('http://www.baidu.com') driver.find_element_by_id('kw').send_keys('selenium') driver.find_element_by_id('su').click() # 显性等待 WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.XPATH,'//a[text()=" - Web Browser Automation"]'))) driver.find_element_by_xpath('//a[text()=" - Web Browser Automation"]').click() print(driver.current_url) driver.quit()
- sleep(x)
强制等待,不管你浏览器是否加载完,程序都得等待3秒,3秒一到,继续执行下面的代码
点击
- 直接调用click()
ele.click
- 调用execute_script(),通过js实现
driver.execute_script("arguments[0].click();", ele)
- 调用鼠标操作实现
ActionChains(driver).move_to_element(ele).click(ele).perform()
设置启动属性参数 EdgeOptions().add_arguments(XXX)
–user-data-dir=”[PATH]” # 指定用户文件夹User Data路径,可以把书签这样的用户数据保存在系统分区以外的分区。 –disk-cache-dir=”[PATH]“ # 指定缓存Cache路径 –disk-cache-size= # 指定Cache大小,单位Byte –first run # 重置到初始状态,第一次运行 –incognito # 无痕模式启动 --user-agent=“xxxxxxxx” # 修改HTTP请求头部的Agent字符串,可以通过about:version页面查看修改效果 --disable-plugins # 禁止加载所有插件,可以增加速度。可以通过about:plugins页面查看效果 --disable-javascript # 禁用JavaScript,如果觉得速度慢在加上这个 --disable-java # 禁用java --start-maximized # 启动窗口最大化 --no-sandbox # 取消沙盒模式 --single-process # 单进程运行 --disable-popup-blocking # 禁用弹出拦截 --disable-plugins # 禁用插件 --disable-images # 禁用图像 --proxy-pac-url # 使用pac代理 [via 1/2] --lang=zh-CN # 设置语言为简体中文 --disk-cache-dir # 自定义缓存目录 --disk-cache-size # 自定义缓存最大值(单位byte) --media-cache-size # 自定义多媒体缓存最大值(单位byte) --enable-sync # 启用书签同步
去掉window.navigator.webdriver检测
- selenium手动接管浏览器