安装
pip install selenium
| 浏览器 | 地址 |
|---|---|
| Edge | developer.microsoft.com/en-us/micro… |
| Firefox | github.com/mozilla/gec… |
| Safari | webkit.org/blog/6900/w… |
| Chrome(113之前) | CNPM Binaries Mirror (npmmirror.com) |
| Chrome(113之后) | CNPM Binaries Mirror |
在
Selenium4中,webdriver.Chrome的初始化方法不再接受executable_path参数来指定Chrome WebDriver的路径。会自动下载驱动。
使用本地浏览器
找到本地浏览器
这只是快捷方式,通过右键属性查看具体位置。
命令行启动本地浏览器
启动前确保其他Chrome实例都关闭
cd C:\Program Files\Google\Chrome\Application
chrome.exe --remote-debugging-port=9222
使用selenium调用
from selenium import webdriver
from scrapy.selector import Selector
from selenium.webdriver.common.by import By
browser_options = webdriver.ChromeOptions()
# 这段代码用于启用 Chrome 浏览器的调试功能,并将调试器的地址设置为 127.0.0.1:9222
browser_options.add_experimental_option('debuggerAddress', '127.0.0.1:9222')
# 启动浏览器
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
option配置
from selenium import webdriver
from scrapy.selector import Selector
from selenium.webdriver.common.by import By
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
# 设置代理ip(会和启动本地浏览器冲突)
options.add_argument(f'--proxy-server=http://{proxy_ip}')
# 添加无头选项
options.add_experimental_option('detach', True)
# 启动浏览器
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
使用
ChromeOptions
from selenium import webdriver
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
页面基本属性
from selenium import webdriver
from scrapy.selector import Selector
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
# 网页标题
print(browser.title)
# 当前网址
print(browser.current_url)
# 浏览器名称
print(browser.name)
# 网页源码
print(browser.page_source)
get
访问页面
from selenium import webdriver
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
set_window_size
set_window_size()方法可以用来设置浏览器大小(就是分辨率),而maximize_window则是设置浏览器为全屏。
from selenium import webdriver
from scrapy.selector import Selector
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
# 设置浏览器大小:全屏
browser.maximize_window()
browser.get('https://juejin.cn/')
time.sleep(2)
# 设置分辨率 500*500
browser.set_window_size(500,500)
time.sleep(2)
# 设置分辨率 1000*800
browser.set_window_size(1000,800)
refresh
刷新页面
from selenium import webdriver
from scrapy.selector import Selector
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
browser.refresh()
前进后退
forward()方法可以用来实现前进,back()可以用来实现后退。
from selenium import webdriver
from scrapy.selector import Selector
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
# 打开淘宝页面
browser.get(r'https://www.baidu.com')
time.sleep(2)
# 后退到掘金页面
browser.back()
time.sleep(2)
# 前进的百度页面
browser.forward()
find_element的By定位
# 使用前先导入By类
from selenium.webdriver.common.by import By
browser.find_element(By.ID,'kw')
browser.find_element(By.NAME,'wd')
browser.find_element(By.CLASS_NAME,'s_ipt')
browser.find_element(By.TAG_NAME,'input')
browser.find_element(By.LINK_TEXT,'新闻')
browser.find_element(By.PARTIAL_LINK_TEXT,'闻')
browser.find_element(By.XPATH,'//*[@id="kw"]')
browser.find_element(By.CSS_SELECTOR,'#kw')
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
browser_options = webdriver.ChromeOptions()
browser_options.add_argument('--disable-extensions')
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.wait = WebDriverWait(browser, 20)
browser.get('https://juejin.cn/')
time.sleep(5)
print(browser.find_element(By.XPATH, '//button[@class="login-button"]'))
find_elements
如果定位的目标元素在网页中不止一个,那么则需要用到find_elements,得到的结果会是列表形式,其他操作一致。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
print(browser.find_elements(By.CLASS_NAME, 'nav-item-wrap'))
get_attribute获取属性
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
# https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/e08da34488b114bd4c665ba2fa520a31.svg
print(browser.find_element(By.CLASS_NAME, 'logo-img').get_attribute('src'))
# 获取源码
print(browser.find_element(By.XPATH, '//div[@class="custom-tbody"]').get_attribute('innerHTML'))
获取文本
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
# 登录
# 注册
print(browser.find_element(By.CLASS_NAME, 'login-button').text)
其他属性
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
# {'x': 1361, 'y': 12}
print(browser.find_element(By.CLASS_NAME, 'login-button').location)
# {'height': 36, 'width': 95}
print(browser.find_element(By.CLASS_NAME, 'login-button').size)
输入文本
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
browser.find_element(By.XPATH,'//input[@class="search-input isResourceVisible"]').send_keys('yhq')
点击
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
browser.find_element(By.XPATH,'//div[@class="login-button-wrap"]').click()
清空文本
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
browser.find_element(By.XPATH,'//input[@class="search-input isResourceVisible"]').clear()
回车确认
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
browser.find_element(By.XPATH,'//div[@class="xxxxx"]').submit()
下拉框
# 使用前先导入Select类
from selenium.webdriver.support.select import Select
'''1、三种选择某一选项项的方法'''
select_by_index() # 通过索引定位;注意:index索引是从“0”开始。
select_by_value() # 通过value值定位,value标签的属性值。
select_by_visible_text() # 通过文本值定位,即显示在下拉框的值。
'''2、三种返回options信息的方法'''
options # 返回select元素所有的options
all_selected_options # 返回select元素中所有已选中的选项
first_selected_options # 返回select元素中选中的第一个选项
'''3、四种取消选中项的方法'''
deselect_all # 取消全部的已选择项
deselect_by_index # 取消已选中的索引项
deselect_by_value # 取消已选中的value值
deselect_by_visible_text # 取消已选中的文本值
模拟鼠标
# 使用前先导入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
ActionChains(browser):调用ActionChains()类,并将浏览器驱动browser作为参数传入
perform():执行ActionChains()中储存的所有操作,可以看做是执行之前一系列的操作
右键
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.action_chains import ActionChains
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
right_click = browser.find_element(By.XPATH,'//div[@class="login-button-wrap"]')
ActionChains(browser).context_click(right_click).perform()
双击
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.common.action_chains import ActionChains
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(2)
right_click = browser.find_element(By.XPATH,'//div[@class="login-button-wrap"]')
ActionChains(browser).double_click(right_click).perform()
悬停
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(5)
elem = browser.find_element(By.CLASS_NAME, 'more')
# 获取元素当前位置坐标
elem_location = elem.location
print(elem_location)
elem_locationX = int(elem_location['x'])
elem_locationY = int(elem_location['y'])
# 悬停
ActionChains(browser).move_to_element(elem).perform()
拖拽
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(5)
start = browser.find_element(By.CLASS_NAME, 'logo-img')
start_loc = start.location
# 悬停
ActionChains(browser).drag_and_drop_by_offset(start, start_loc['x'] + 100, start_loc['y'] + 100).perform()
显示等待
设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
until(method,message='')
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常
until_not(method,message='')
until_not 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
# 等待页面加载完成
WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.item-box')))
运行JavaScript
import time
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
time.sleep(5)
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("yhq")')
close
关闭浏览器当前页面
from selenium import webdriver
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
browser.close()
quit
关闭浏览器全部页面
from selenium import webdriver
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
browser = webdriver.Chrome(options=browser_options)
browser.get('https://juejin.cn/')
browser.quit()
mouse
安装
$ pip install mouse
使用
move
from selenium import webdriver
from scrapy.selector import Selector
from selenium.webdriver.common.by import By
from mouse import move
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
# 启动浏览器
browser = webdriver.Chrome(options=browser_options)
browser.get('https://www.zhihu.com/signin')
# 选择登录方式
browser.find_element(By.XPATH, '//div[@class="SignFlow-tab"]').click()
# 输入账号密码
browser.find_element(By.NAME, 'username').send_keys('15284374543')
browser.find_element(By.NAME, 'password').send_keys('YHQzh1026')
# 点击登录
# browser.find_element(By.XPATH, '//button[@type="submit"]').click()
move(1028, 567)
click
from selenium import webdriver
from scrapy.selector import Selector
from selenium.webdriver.common.by import By
from mouse import move, click
browser_options = webdriver.ChromeOptions()
#关闭自动控制blink特征
options.add_argument('--disable-blink-features=AutomationControlled')
# 启动浏览器
browser = webdriver.Chrome(options=browser_options)
browser.get('https://www.zhihu.com/signin')
# 选择登录方式
browser.find_element(By.XPATH, '//div[@class="SignFlow-tab"]').click()
# 输入账号密码
browser.find_element(By.NAME, 'username').send_keys('15284374543')
browser.find_element(By.NAME, 'password').send_keys('YHQzh1026')
# 点击登录
# browser.find_element(By.XPATH, '//button[@type="submit"]').click()
move(1028, 567)
click()