Selenium 使用本地浏览器
安装
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实例都关闭
shell
复制代码
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
scss
复制代码
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()
显示等待
设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常。
makefile
复制代码
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None) driver: 浏览器驱动 timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间) poll_frequency: 每次检测的间隔时间,默认是0.5秒 ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
vbnet
复制代码
until(method,message='') method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False message: 如果超时,抛出TimeoutException,将message传入异常
ini
复制代码
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
安装
shell
复制代码
$ 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()