selenium原为自动化测试工具,它会较为真实的模拟用户 使用浏览器发送请求,在使用时会打开浏览器在屏幕上操作移动 ,其支持主流的浏览器比如chrome,firefox或者PhantomJS (其不显示浏览器,但可在背后完成一系列操作,其非常适合配合selenium部署在没有界面的服务器上[如果在无界面服务器上使用chrome会报错失败] );selenium相比requests慢许多许多
一.基础
1. 初始
1.安装:pip install selenium
2.下载驱动器(chrome为例子):
https://chromedriver.chromium.org/downloads
注意:下载与自己chrome版本相匹配 的,下载上将其放置在本机python.exe 同级目录下,一般报错的时候会告诉你路径,你将其放在指定路径即可。由于浏览器的不停更新,对于chromedriver需要及时更新去官网下载新的替换旧的,否则你可能执行时会遇到错误
3.测试
python
from selenium import webdriver
import time
browser = webdriver.Chrome() # 注意要加双斜杠
url = 'https://www.baidu.com'
# 请求百度
browser.get(url)
time.sleep(2)
# 关闭浏览器
browser.close()
# 退出
browser.quit()
2. 常用属性及方法
driver.page_source #driver是选择了浏览器driver后返回的内容
当前标签页浏览器渲染之后的网页源代码driver.current_url
当前标签页的url
driver.close()
关闭当前标签页,如果只有一个标签页则关闭整个浏览器driver.quit()
关闭浏览器
driver.forward()
页面前进driver.back()
页面后退
driver.save_screenshot(img_name)
页面截图
二.操作
1. 获取元素
解释:selenium可以通过id,class定位还可以通过xpath,推荐使用xpath简单快速
python
find_element_by_id (返回一个元素)
find_element_by_class_name (根据类名获取元素列表)
find_element_by_name (根据标签的name属性值返回包含标签对象元素的列表)
find_element_by_xpath (返回一个包含元素的列表)
find_element_by_link_text (根据连接文本获取元素列表)
find_element_by_partial_link_text (根据链接包含的文本获取元素列表)
find_element_by_tag_name (根据标签名获取元素列表)
find_element_by_css_selector (根据css选择器来获取元素列表)
2. 元素操作
- 元素点击:
element.click() #element是需要获取到的元素
- 输入框输入:
element.send_keys(data)
- 清除输入:
element.clear()
- 获取文本内容:
element.text(data)
- 获取属性内容:
element.get_attribute("属性名")
3. 链
解释:可能实现更多元素操作
导入:from selenium.webdriver import ActionChains
python
browser = webdriver.Chrome(executable_path='C:Python\\Python38\\chromedriver.exe')
url = 'https://www.oh.cn/login'
browser.get(url)
button = browser.find_element_by_xpath('/html/body/div/div/div[2]/form[1]/div/div[4]/div/button')
chain = ActionChains(browser) # 实例化链对象
chain.double_click(button) # 链方法 双击
chain.perform()# 执行
-
元素双击击:
chain.double_click(button) #chain是实例化链对象;button是需要获取到的元素
-
左键点击并保持:
chain.click_and_hold(button)
-
点击-移动:
chain.drag_and_drop(source, target)#鼠标左键点击source元素,然后移动到target元素释放鼠标按键
- 拖拽移动到具体位置:
chain.drag_and_drop_by_offset(source, xoffset,yoffset)
- 拖拽移动到具体位置:
-
按键:
python
# 举例 ctrl-c
from selenium.webdriver.common.keys import Keys
ActionChains(driver).key_down(Keys.CONTROL).send_keys('c').key_up(Keys.CONTROL).perform()
# key_down 按下只能是功能键(Contril,Alt,Shift等),send_keys相当于按了c键,key_up松开了ctrl键
三.其它方法
1.启用无界面模式
python
options = webdriver.ChromeOptions()#实例化配置对象
options.add_argument("--headless")#配置对象添加开启无界面模式的命令
options.add_argument("--disable-gpu")#配置对象添加禁用gpu的命令
driver = webdriver.Chrome(chrome_options=options,executable_path='C:\\Users\\GaoXX\\AppData\\Local\\Programs\\Python\\Python38\\chromedriver.exe')#实例化带有配置对象的driver对象
url = 'https://www.a.cn'
driver.get(url)
driver.save_screenshot('01.png')
2.获取cookie的方法
- 获取
python
driver.get_cookies() # 要是获取不到,需要注意放一个time.sleep让程序等待一下,太快显示不出来
# 后面会介绍更好的等待方式
- 添加
python
list =[{'domain': 'www.g.cn', 'httpOnly': True, 'name': 'session', 'path': '/', 'secure': False, 'value': '.'}, {'domain': 'www.g.cn', 'expiry': 1691585195, 'httpOnly': False, 'name': 'remember_token', 'path': '/', 'secure': False, 'value': '55'}] # cookie
# 每次只能添加一个字典
for i in list:
driver.add_cookie(i)
- 删除
python
#删除一条cookie
driver.delete_cookie("CookieName")
# 删除所有的cookie
driver.delete_all_cookies()
3.执行js代码
python
js = 'alert(123)' # js语句
driver.execute_script(js) # 执行js的方法