Chrome启动选项
这是一个Chrome的参数对象,在此对象中使用add_argument()方法可以添加启动参数,添加完毕后可以在初始化Webdriver对象时将此Options对象传入,则可以实现以特定参数启动Chrome。
例子:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
# 打开一个Chrome浏览器
options = Options()
options.add_argument('--window-size=1000,700')
options.add_argument('--disable-infobars')
browser = webdriver.Chrome(chrome_options = options)
# 请求百度首页
browser.get('https://www.baidu.com')
time.sleep(5)
browser.quit()- 常用的启动参数
启动参数 | 作用 |
--user-agent="" | 设置请求头的User-Agent |
--window-size=1366,768 | 设置浏览器分辨率 |
--headless | 无界面运行 |
--start-maximized | 最大化运行 |
--incognito | 隐身模式 |
--disable-javascript | 禁用javascript |
--disable-infobars | 禁用浏览器正在被自动化程序控制的提示 |
启动参数有很多,可自行相关查阅
- 禁用图片加载
Chrome的禁用图片加载参数设置比较复杂,如下所示:
prefs = {
'profile.default_content_setting_values' : {
'images' : 2
}
}
options.add_experimental_option('prefs',prefs)- 禁用浏览器弹窗
使用浏览器时常常会有弹窗弹出,以下选项可以禁止弹窗:
prefs = {
'profile.default_content_setting_values' : {
'notifications' : 2
}
}
options.add_experimental_option('prefs',prefs)Chrome WebDriver对象
再将selenium安装时,我讲到应将解压后的webdriver放在系统环境变量中,其实不然。我们也可以将其放在执行项目下。再实例化时传入指定参数即可。
from selenium import webdriver
browser = webdriver.Chrome(executable_path='chromedriver.exe')
Remote Webdriver
selenium.webdriver.remote.webdriver.WebDriver 这个类其实是所有其他Webdriver的父类,例如Chrome Webdriver,Firefox Webdriver都是继承自这个类。这个类中实现了每个Webdriver间相通的方法。
方法
- get(url):在当前浏览器会话中访问传入的url地址。
driver.get('https://www.baidu.com')- close():关闭浏览器当前窗口。
- quit():退出webdriver并关闭所有窗口。
- refresh():刷新当前页面。
属性
- title:获取当前页的标题。
- page_source:获取当前页渲染后的源代码。
- current_url:获取当前页面的url。
- window_handles:获取当前会话中所有窗口的句柄,返回的是一个列表。
例子
实现打开百度首页,并自动刷新一次,打印当前的url,title及窗口句柄,并在5秒后自动关闭浏览器。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
# 打开一个Chrome浏览器
options = Options()
options.add_argument('--disable-infobars')
browser = webdriver.Chrome(chrome_options = options)
# 请求百度首页
browser.get('https://www.baidu.com')
print(browser.title)
print(browser.current_url)
print(browser.window_handles)
browser.refresh()
time.sleep(5)
browser.quit()百度一下,你就知道
https://www.baidu.com/
['CDwindow-FFC72CF60AA9472A231507D01435F5B8', 'CDwindow-521B7A7026F5519D4EBDF0CC717BBB0C']查找元素
Webdriver对象中内置了查找节点元素的方法,使用非常方便。查找后返回的是一个Webelement对象。
单个查找
方法 | 作用 |
| 通过 |
| 通过 |
| 通过 |
| 通过 |
| 通过 |
| 通过 |
| 通过 |
| 通过 |
多个查找
上面的方法都是将第一个找到的元素进行返回,而将所有匹配的元素进行返回使用的是find_elements_by_*方法。各种方法参照上表格。此方法返回的是一个Webelement对象组成的列表。
私有方法查找
除了以上的多种查找方式,还有两种私有方法find_element()和find_elements()可以使用:
from import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')By这个类是专门用来查找元素时传入的参数,这个类中有以下属性:
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"操作Cookie
- add_cookie(cookie_dict)
给当前会话添加一个cookie。cookie_dict: 一个字典对象,必须要有"name"和"value"两个键,可选的键有:“path”, “domain”, “secure”, “expiry” 。
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’})
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’})
driver.add_cookie({‘name’ : ‘foo’, ‘value’ : ‘bar’, ‘path’ : ‘/’, ‘secure’:True})- get_cookie(name)
按name获取单个Cookie,没有则返回None。
- get_cookies()
获取所有Cookie,返回的是一组字典。
- delete_all_cookies()
删除所有Cookies。
- delete_cookie(name)
按name删除指定cookie。
获取截屏
- get_screenshot_as_base64()
获取当前窗口的截图保存为一个base64编码的字符串。
- get_screenshot_as_file(filename)
获取当前窗口的截图保存为一个png格式的图片,filename参数为图片的保存地址,最后应该以.png结尾。如果出现IO错误,则返回False。
- get_screenshot_as_png()
获取当前窗口的截图保存为一个png格式的二进制字符串。
获取窗口信息
- get_window_position(windowHandle='current')
获取当前窗口的x,y坐标。
- get_window_rect()
获取当前窗口的x,y坐标和当前窗口的高度和宽度。
In [1]: driver.get_window_rect()
Out[1]: {'height': 600, 'width': 800, 'x': 0, 'y': 200}- get_window_size(windowHandle='current')
获取当前窗口的高度和宽度。
切换框架或窗口
- switch_to.frame(frame_reference)
在页面中,如果有iframe这样的页面子框架的话,selenium是无法搜索到子框架frame中的元素,并与之定位的。所以如果要操作frame中的元素,则首先要切换到这个frame中。
首先我们需要使用上面提供的搜索方法find_element_by_*等来找到frame框架,然后传入到切换的方法中。
frame = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(frame)还有一个方法可以切换回主界面:
driver.switch_to.default_content()- switch_to.window(window_name)
这个方法可以让我们在一个浏览器中的窗口中互相切换,这个方法中需要传入目标窗口的句柄,窗口句柄可以通过driver.window_handles等方法来进行获取。
windows = driver.window_handles
# 切换到最新打开的窗口中
switch_to.window(windows[-1])执行JS代码
- execute_async_script(script, *args)
在当前的window/frame中异步执行JS代码。script表示要执行的JS代码,*args表示JS代码执行要传入的参数。
- execute_script(script, *args)
在当前的window/frame中同步执行JS代码。
















