下载安装Selenium
selenium元素定位
控制浏览器操作
控制浏览器窗口大小
控制浏览器前进后退
刷新页面
WebDriver常用方法
点击和输入
提交
其他方法
鼠标事件
键盘事件
获取断言信息
设置元素等待
显式等待
隐式等待
定位一组元素
多表单切换
多窗口切换
警告框
下拉列表框选择
文件上传
调用JavaScript代码
窗口截图
关闭浏览器
在DOS窗口输入命令pip install selenium
然后使用python编辑器输入如下代码进行运行:
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
print(driver.title)
driver.quit()
运行报错:
Traceback (most recent call last):
File "E:\预PyCharm项目\教程\Demo\venv\lib\site-packages\selenium\webdriver\common\service.py", line 76, in start
stdin=PIPE)
File "F:\python\InstallationFiles\lib\subprocess.py", line 756, in __init__
restore_signals, start_new_session)
File "F:\python\InstallationFiles\lib\subprocess.py", line 1155, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "E:/预PyCharm项目/教程/第二章/demo1/demo1-1.py", line 3, in
driver=webdriver.Chrome()
File "E:\预PyCharm项目\教程\Demo\venv\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 73, in __init__
self.service.start()
File "E:\预PyCharm项目\教程\Demo\venv\lib\site-packages\selenium\webdriver\common\service.py", line 83, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
因为使用selenium驱动不同的浏览器,需要单独下载并设置不同的浏览器驱动。
各浏览器驱动地址:
注意:要下载和自己电脑浏览器版本相同的浏览器驱动,否则会报错
浏览器驱动 | 地址 |
---|---|
Firefox浏览器驱动 | https://github.com/mozilla/geckodriver/releases |
Chrome浏览器驱动 | https://npm.taobao.org/mirrors/chromedriver |
IE浏览器驱动 | http://selenium-release.storage.googleapis.com/index.html |
Edge浏览器驱动 | https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver |
Opera浏览器驱动 | https://github.com/operasoftware/operachromiumdriver/releases |
PhantomJS浏览器驱动 | http://phantomjs.org/ |
下载成功后就是设置浏览器驱动。
然后将其添加到Path中
我的电脑-->属性-->系统设置-->高级-->环境变量-->系统变量-->Path
再次运行上面的python代码,如果还是报错。
可以自己定义驱动器的路径:
driver = webdriver.Chrome(r"F:\BrowserDriver\chromedriver\chromedriver_win32\chromedriver.exe")
运行成功则在控制台打印:
百度一下,你就知道
其他的浏览器驱动:
webdriver.Chrome()# 谷歌浏览器
webdriver.Firefox()# 火狐浏览器
webdriver.Ie() # IE浏览器
webdriver.Edge() # Edge浏览器
webdriver.Opera() # Opera浏览器
webdriver.PhantomJS() # PhantomJS浏览器
定位方式 | 对应方法 | 描述 |
---|---|---|
id | find_element_by_id() | 通过元素的ID属性 |
name | find_element_by_name() | 通过元素的name属性 |
className | find_element_by_class_name() | 通过元素的class属性(即类名) |
tagName | find_element_by_tag_name() | 通过元素的标签名 |
linkText | find_element_by_link_text() | 通过超链接的文本值(是a元素)必须精确匹配 |
partialLinkText | find_element_by_partial_link_text() | 通过超链接的文本值(是a元素)是模糊匹配 |
xpath | find_element_by_xpath() | 通过xpath表达式 |
cssSelector | find_element_by_css_selector() | 通过CSS选择器 |
实例介绍:
from selenium import webdriver
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 通过ID定位
driver.find_element_by_id("kw")
# 通过name定位
driver.find_element_by_name("wd")
# 通过className定位
driver.find_element_by_class_name("s_ipt")
# 通过tagName定位
driver.find_element_by_tag_name("input")
# 通过xpath表达式定位(能够定位成功的xpath表达式有很多,这里只写一种)
driver.find_element_by_xpath("//input[@id='kw']")
# 通过CSS选择器定位(能够定位成功的CSS选择器有很多,这里只写一种)
driver.find_element_by_css_selector(".s_ipt")
# 通过a元素的文本值进行精确定位(精确地位即a标签的完整文本值)
driver.find_element_by_link_text("新闻")
# 通过a元素的文本值进行模糊定位(模糊定位即a标签的一些文本值)
driver.find_element_by_partial_link_text("新")
driver.quit()
让某种浏览器以自定义尺寸打开,让访问的页面在这种尺寸下运行。
python代码如下:
from selenium import webdriver
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
driver.set_window_size(300, 400) # 第一个参数是浏览器的宽度;第二个参数是浏览器的高度
# driver.maximize_window()# 控制浏览器全屏显示
# driver.quit() # 这行代码先注释掉,以免运行后直接关掉
运行效果如下:
在使用浏览器浏览网页时,浏览器提供了后退和前进按钮,可以方便地在浏览过的网页之间切换,WebDriver也提供了对应的back()和forward()方法来模拟后退和前进按钮。
from selenium import webdriver
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
# 访问百度首页,即第一个页面
first_url = "https://www.baidu.com/"
print("现在访问: " + first_url)
driver.get(first_url)
# 访问新闻页面,即第二个页面
second_url = "http://news.baidu.com/"
print("现在访问:" + second_url)
driver.get(second_url)
# 后退到百度首页(第一个页面)
print("后退到百度首页:" + first_url)
driver.back()
# 前进到新闻页面(第二个页面)
print("前进到新闻页面:" + second_url)
driver.forward()
# driver.quit() # 这行代码先注释掉,以免运行后直接关掉
由于页面切换比较快,图片不好展示,以控制台打印来显示执行过程:
现在访问: https://www.baidu.com/
现在访问:http://news.baidu.com/
后退到百度首页:https://www.baidu.com/
前进到新闻页面:http://news.baidu.com/
如果需要手动刷新页面,可以使用refresh()方法。
from selenium import webdriver
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
# 手动刷新页面
driver.refresh()
# driver.quit() # 这行代码先注释掉,以免运行后直接关掉
from selenium import webdriver
# clear():清除输入框中的文本
# send_keys(value):模拟按键在输入框中输入文本值
# click():单击按钮元素
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 清除ID为"kw"的输入框中的文本
driver.find_element_by_id("kw").clear()
# 向ID为"kw"的输入框中输入一个值
driver.find_element_by_id("kw").send_keys("Hello World!")
# 点击ID为"su"的按钮
driver.find_element_by_id("su").click()
# driver.quit() # 这行代码先注释掉,以免运行后直接关掉
运行成功,会有如下效果:
submit()方法用于提交表单。 例如, 在搜索框输入关键字之后的“回车” 操作, 就可以通过该方法模拟。
from selenium import webdriver
# submit():用于提交表单,和click()方法相似
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 获取ID为"kw"的输入框
search_text = driver.find_element_by_id("kw")
# 清除ID为"kw"的输入框中的文本
search_text.clear()
# 向ID为"kw"的输入框中输入一个值
search_text.send_keys("Hello World!")
# 并使用submit()方法提交
search_text.submit()
# driver.quit() # 这行代码先注释掉,以免运行后直接关掉
运行成功的效果如下:
和上面的click()方法类似。
from selenium import webdriver
# size:属性,返回元素的尺寸,结果是一个字典
# text:属性,返回元素的文本
# get_attribute(attributeName):方法,返回元素的属性值,参数是要获取的属性名字
# is_displayed():设置该元素是否用户可见
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 获取ID为"kw"的元素的尺寸大小
size = driver.find_element_by_id("kw").size
print(size)
# 获取ID为"tj_trnews"的元素的文本
text = driver.find_element_by_name("tj_trnews").text
print(text)
# 返回ID为"tj_trnews"的元素的属性值
attribute = driver.find_element_by_name("tj_trnews").get_attribute("href")
print(attribute)
# 返回ID为"tj_trnews"的元素的结果是否可见,返回值是True或False
result = driver.find_element_by_name("tj_trnews").is_displayed()
print(result)
driver.quit()
控制台打印结果为:
{'height': 22, 'width': 500}
新闻
http://news.baidu.com/
True
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains # 导入鼠标操作方法的类
# 在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供。
# ActionChains 类提供了鼠标操作的常用方法:
# perform(): 执行所有 ActionChains 中存储的行为;
# context_click(): 右击;
# double_click(): 双击;
# drag_and_drop(): 拖动;
# move_to_element(): 鼠标悬停。
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 获取ID为"su"的元素
element = driver.find_element_by_id("su")
# 执行鼠标悬停操作
# 调用 ActionChains()类, 将浏览器驱动 driver 作为参数传入。
# move_to_element(element)方法是模拟鼠标悬停操作,在调用是传入要指定的元素
# perform()相当于提交
ActionChains(driver).move_to_element(element).perform()
driver.quit()
示例代码如下:
from selenium import webdriver
# 使用键盘事件需要引入keys模块
from selenium.webdriver.common.keys import Keys
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 输入框输入内容
driver.find_element_by_id("kw").send_keys("Hello")
# 输入空格键
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
# 输入框输入内容
driver.find_element_by_id("kw").send_keys("World!")
# 复制输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, "c")
# 通过回车键提交输入框内容
driver.find_element_by_id("su").send_keys(Keys.ENTER)
# driver.quit()
运行效果图如下:
代码解释说明:
send_keys(Keys.BACK_SPACE) :删除键(BackSpace)
send_keys(Keys.SPACE):空格键(Space)
send_keys(Keys.TAB) :制表键(Tab)
send_keys(Keys.ESCAPE) :回退键(Esc)
send_keys(Keys.ENTER): 回车键(Enter)
send_keys(Keys.CONTROL,'a') :全选(Ctrl+A)
send_keys(Keys.CONTROL,'c') :复制(Ctrl+C)
send_keys(Keys.CONTROL,'x') :剪切(Ctrl+X)
send_keys(Keys.CONTROL,'v') :粘贴(Ctrl+V)
send_keys(Keys.F1) 键盘 F1
……
send_keys(Keys.F12) 键盘 F12
将程序实际产生的结果与自己预期想要产生的结果进行比较,即为断言。
在selenium中通常使用title、URL和text等信息进行断言。
import time
from selenium import webdriver
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
print("搜索提交之前:")
print(driver.title) # 打印当前页面的title
print(driver.current_url) # 打印当前页面的URL
driver.find_element_by_id("kw").send_keys("Hello World!")
driver.find_element_by_id("su").click()
time.sleep(3)# 延迟3秒
print("搜索提交之后:")
print(driver.title) # 打印当前页面的title
print(driver.current_url) # 打印当前页面的URL
print(driver.find_element_by_css_selector("span.nums_text").text) # 打印结果
driver.quit()
控制台打印:
搜索提交之前:
百度一下,你就知道
https://www.baidu.com/
搜索提交之后:
Hello World!_百度搜索
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Hello%20World!&rsv_pq=ac825d880001b31a&rsv_t=6e57kMEF39ti66UkqskIuuYFq1L5LER8TH%2F7tKqs8vlflFjmFTI8%2FAKVk7w&rqlang=cn&rsv_enter=0&rsv_dl=tb&rsv_sug3=12&inputT=190&rsv_sug4=191
百度为您找到相关结果约22,400,000个
代码解释说明:
title:用于获得当前页面的标题。
current_url:用户获得当前页面的URL。
text:获取元素的文本信息。
WebDriver提供了两种类型的等待:显式等待和隐式等待。
显式等待即是等待某个条件成立时再继续执行,否则在达到最大时长时抛出超时异常。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
# 设置元素等待
# 显式等待:在某个条件成立时继续执行,否则在超时后抛出异常
# 隐式等待:
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
element.send_keys("Hello World!")
# driver.quit()
运行完成后如果不关闭浏览器,就会出现如下:
如果把"kw"改成"kww"
由于不存在这个元素就会报异常TimeoutException
代码解释说明:
from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait参数介绍:
WebDriverWait(driver,timeout,poll_frequency,ignored_exceptions)
# driver:浏览器的驱动
# timeout:最长超时时间,默认以秒为单位
# poll_frequency:检测的间隔(步长)时间,默认为0.5S。
# ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
隐式等待通过implicitly_wait()方法来实现,默认设置为0.
from time import ctime
from selenium import webdriver
from selenium.common.exceptions import NoSuchCookieException
# 设置元素等待
# 显式等待:在某个条件成立时继续执行,否则在超时后抛出异常
# 隐式等待:如果元素可以定位则继续执行,否则以轮询的方式不断判断元素是否被定位到,直到超出设置时长才抛出异常
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 设置隐式等待为10秒
driver.implicitly_wait(10) # 默认参数的单位是秒
try:
print(ctime()) # 输出现在时间
driver.find_element_by_id("kww").send_keys("Hello World!") # 查找id为"kww"的元素,如果没有找到10秒后抛出异常
except NoSuchCookieException as e:
print(e)
finally:
print(ctime()) # 输入现在时间
driver.quit()
控制台抛出异常的打印:
定位一组元素和定位单个元素相似,只是多个s而已。
driver.find_elements_by_id()# 通过ID查找一组元素
driver.find_elements_by_name()# 通过name属性查找一组元素
driver.find_elements_by_class_name()# 通过class名查找一组元素
driver.find_elements_by_tag_name()# 通过标签名查找一组元素
driver.find_elements_by_link_text()# 通过a标签的文本值精确匹配一组元素
driver.find_elements_by_partial_link_text()# 通过a标签的文本值模糊匹配一组元素
driver.find_elements_by_xpath()# 通过XPATH表达式查找一组元素
driver.find_elements_by_css_selector()# 通过CSS选择器查找一组元素
下面只演示其中一个的例子,使用和定位单个元素相同。
from selenium import webdriver
# 定位一组元素
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 通过ID查找一组a标签的元素,返回一个列表
elements = driver.find_elements_by_tag_name("a")
# 选好遍历列表
for element in elements:
print(element.text)
driver.quit()
控制台打印:
新闻
hao123
地图
视频
贴吧
学术
登录
设置
更多产品
把百度设为主页
关于百度
About Baidu
百度推广
使用百度前必读
意见反馈
京公网安备11000002000001号
在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。
这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。
下面以网易邮箱的登录为例:
from selenium import webdriver
# 多表单切换
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("https://mail.163.com/")
# 点击“密码登录”超链接,跳转至登录表单
driver.find_element_by_id("switchAccountLogin").click()
# 跳到iframe表单
iframe = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
driver.find_element_by_xpath("//input[@name='email']").send_keys("10086")
driver.find_element_by_name("password").send_keys("123456")
# 跳回到最外层的页面
# driver.switch_to.default_content()
# driver.quit()
运行成功的效果如下:
代码解释说明:
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。
WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换。
以百度注册为例:
from selenium import webdriver
# 多窗口切换
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F")
# 获取当前页面的窗口句柄
current_handle = driver.current_window_handle
# 打开“立即注册”新窗口
driver.find_element_by_link_text("立即注册").click()
# 获取当前打开的所有的窗口的句柄
all_handles = driver.window_handles
# 切换窗口
for handle in all_handles:
if handle != current_handle:
# 切换窗口
driver.switch_to.window(handle)
# 为输入框填入值
driver.find_element_by_name("userName").send_keys("userName")
driver.find_element_by_name("phone").send_keys("phone")
# driver.quit()
打开的浏览器页面如下:
代码解释说明:
webdriver可用处理由JavaScript产生的alert、confirm及prompt等对话框。
示例如下:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
# 处理警告框
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 将鼠标放在“设置”链接上
link=driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(link).perform()
# 打开“搜索设置”
driver.find_element_by_link_text("搜索设置").click()
time.sleep(6)# 需要等待一段时间
# 点击“保存设置”
driver.find_element_by_link_text("保存设置").click()
# 接受警告框
# driver.switch_to.alert.accept()
# 打印警告框信息
print(driver.switch_to.alert.text)
# driver.quit()
控制台打印:
已经记录下您的使用偏好
浏览器如下:
代码解释说明:
可用Select类来处理下拉列表框。
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.select import Select
# 下拉列表框选择
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("http://www.baidu.com")
# 将鼠标放在“设置”链接上
link = driver.find_element_by_link_text("设置")
ActionChains(driver).move_to_element(link).perform()
# 打开“搜索设置”
driver.find_element_by_link_text("搜索设置").click()
time.sleep(6) # 需要等待一段时间
# 获取下拉列表框并选择值
select = driver.find_element_by_name("NR")
# Select(select).select_by_index(2)# 通过索引进行选择,索引从0开始
# Select(select).select_by_value("20")# 通过值进行选择
Select(select).select_by_visible_text("每页显示20条")# 通过显式的文本进行选择
# driver.quit()
浏览器效果如下:
对于通过input标签实现的上传功能,可以将其看作是一个输入框,即通过send_keys()指定本地文件路径的方式实现文件上传。
from selenium import webdriver
# 下拉列表框选择
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("https://download.csdn.net/upload")
driver.find_element_by_id("txt_userfile").send_keys(r"C:\Users\Administrator\Documents\temp\temp.txt")
# driver.quit()
WebDriver提供了操作Cookie的相关方法,可以读取、添加和删除cookie信息。
WebDriver操作cookie的方法:
方法 | 描述 |
---|---|
get_cookies() | 获得所有的cookie信息 |
get_cookie(name) | 返回字典的key为“name”的cookie信息 |
add_cookie(cookie_dict) | 添加cookie。参数是一个字典对象,必须拥有name和value值 |
delete_cookie(name,optionsString) | 删除cookie信息,“name”是要删除的cookie名称;“optionsString”是该cookie的选项 |
delete_all_cookies() | 删除所有的cookie信息 |
from selenium import webdriver
# 操作cookie
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("https://www.baidu.com/")
# 获取cookie信息
cookie=driver.get_cookies()
# 打印
print(cookie)
# 写入cookie信息
driver.add_cookie({"name":"张三","value":"123456"})
# 打印
print(driver.get_cookies())
# 删除cookie
driver.delete_all_cookies()
# 打印
print(driver.get_cookies())
driver.quit()
控制台打印:
[{'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1434_21120_30210_30071_22159'}, {'domain': '.baidu.com', 'expiry': 1607165433.523985, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': 'C2D902C0E736D3D3F1BCEC5909153B0E:FG=1'}, {'domain': '.baidu.com', 'expiry': 3723113080.523962, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': 'C2D902C0E736D3D30F3C6E6D815F1039'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'delPer', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 3723113080.523975, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1575629434'}, {'domain': '.baidu.com', 'expiry': 1575715833.924175, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5EBF6F3CD402E515D22BCDA1598'}, {'domain': 'www.baidu.com', 'expiry': 1576493433, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '0'}]
[{'domain': 'www.baidu.com', 'httpOnly': False, 'name': '张三', 'path': '/', 'secure': True, 'value': '123456'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID', 'path': '/', 'secure': False, 'value': '1434_21120_30210_30071_22159'}, {'domain': '.baidu.com', 'expiry': 1607165433.523985, 'httpOnly': False, 'name': 'BAIDUID', 'path': '/', 'secure': False, 'value': 'C2D902C0E736D3D3F1BCEC5909153B0E:FG=1'}, {'domain': '.baidu.com', 'expiry': 3723113080.523962, 'httpOnly': False, 'name': 'BIDUPSID', 'path': '/', 'secure': False, 'value': 'C2D902C0E736D3D30F3C6E6D815F1039'}, {'domain': '.baidu.com', 'httpOnly': False, 'name': 'delPer', 'path': '/', 'secure': False, 'value': '0'}, {'domain': '.baidu.com', 'expiry': 3723113080.523975, 'httpOnly': False, 'name': 'PSTM', 'path': '/', 'secure': False, 'value': '1575629434'}, {'domain': '.baidu.com', 'expiry': 1575715833.924175, 'httpOnly': False, 'name': 'BDORZ', 'path': '/', 'secure': False, 'value': 'B490B5EBF6F3CD402E515D22BCDA1598'}, {'domain': 'www.baidu.com', 'expiry': 1576493433, 'httpOnly': False, 'name': 'BD_UPN', 'path': '/', 'secure': False, 'value': '12314753'}, {'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME', 'path': '/', 'secure': False, 'value': '0'}]
[]
WebDriver提供了execute_script()方法来执行JavaScript代码。
import time
from selenium import webdriver
# 执行JavaScript代码
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("https://www.baidu.com/")
driver.set_window_size(300, 400) # 设置浏览器大小
# 通过JavaScript设置浏览器窗口的滚动条位置
js1 = "window.scrollTo(100,300)"
driver.execute_script(js1)
time.sleep(5)
js2 = "alert('正在使用selenium执行JavaScript代码哟!')"
driver.execute_script(js2)
# driver.quit()
浏览器效果如下:
WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。
import time
from selenium import webdriver
# 窗口截图
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("https://www.baidu.com/")
driver.set_window_size(300, 400) # 设置浏览器大小
# 截取当前窗口,并指定截图图片的保存位置
driver.get_screenshot_as_file("screen_shot.png")
driver.quit()
图片如下:
webdriver提供两个方法
close() 关闭单个窗口
quit() 关闭所有窗口
from selenium import webdriver
# 关闭窗口
# close() 关闭单个窗口
# quit() 关闭所有窗口
options = webdriver.ChromeOptions() # 由于浏览器安装的原因,这里自定义了浏览器的exe安装路径
options.binary_location = r"F:\谷歌浏览器\安装文件\Chrome-78.0.3904.108\Google\Chrome\Application\chrome.exe"
driver = webdriver.Chrome(options=options)
driver.get("https://www.baidu.com/")
# 关闭窗口
driver.quit()