一、概述
1.1、概述
- 使用场景:
1、需要自动化登录,无法获取长期cookie或token时(登陆遇到扫码,输入验证码等)。
2、获取网页中ajax(异步加载)数据时,先找接口,如果接口加密,则使用selenium.
- 异步加载案例:
案例:获取腾讯云的ecs时,需要获取各个地区数据,各个地区需要点击才会显示对应的数据,并且点击后网页不变。
分析:典型的异步加载数据,第一步去找存储数据的接口,由于接口加密,因此需要用selenium.
- selenium的优势
selenium可以使用element=driver.page_source,获得的element是js渲染过的数据。可以直接xpath获取即可。
1.2、Mac配置chromedriver
-
1、下载对应版本
-
2、解压
-
3、解压后的文件拖到:/usr/local/bin
二、使用流程
2.1、声明浏览器对象
#声明浏览器对象
from selenium import webdriver
#使用selenium
driver = webdriver.Chrome() #实例化Chrome浏览器
driver = webdriver.Firefox() #实例化Firefox浏览器
#创建无头浏览器
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver= webdriver.Chrome(chrome_options=options)#声明浏览器对象(此时chromdrver一定要配置环境变量,或者把chromdriver放在程序目录下,或者传入chromdriver.exe位置,放在第一位)
#使用PhantomJS
driver= webdriver.PhantomJS('F:\\谷歌下载\\phantomjs-1.9.7-windows\\phantomjs.exe')
2.2、访问页面
#请求渲染后的网页源码
driver.get("http://www.baidu.com”)
#获取渲染后的网页源码
html = driver.page_source
2.3、定位页面元素
根据属性定位(xpath、by_id、by_name、by_class_name)
#根据xpath定位元
driver.find_element_by_xpath("...")
#根据id属性定位
driver.find_element_by_id("kw").send_keys('python')#输入
driver.find_element_by_id("su").click()#点击
#根据name属性定位
driver.find_element_by_name('wd').clear()#清空输入
#根据class属性定位
driver.find_element_by_class_name('s_ipt').clear()#清空输入
根据页面标签定位(by_link_text、by_partial_link_text)
#定位下一页标签并点击(必须是标签的全部)
driver.find_element_by_link_text('下一页>').click()
#定位下一页标签并点击(可以是标签的部分)
driver.find_element_by_partial_link_text('下一页').click()
根据xpath定位(find_elements_by_xpath、find_element_by_xpath)
# 获取标签列表(elements返回的是列表,没有.text.并且没有获取到东西会返回空列表)
ret1=driver.find_elements_by_xpath("")
for li in ret1:
# 获取li标签下的文本(element返回的是值,有.text,没有获取到东西会报错)
ret2=li.find_element_by_xpath("").text
# 获取li标签下的变量
ret3=li.find_element_by_xpath("").get_attribute("")
-
注意
# 如果element中含有:iframe frame需要调用driver.switch_to.frame(''),切换到frame中,才能定位元素。 #切换到iframe driver.switch_to.frame('')
2.4、获取元素
#获取cookie
cookies=driver.get_cookies()
#使用字典推导式,将cookies转化为requests可用的cookie
cookies = ";".join([item["name"] + "=" + item["value"] + "" for item in cookies])
#获取浏览器中element内容
element=driver.page_source
#获取当前url
url=driver.current_url
2.5、控制界面
#设置窗口大小
driver.set_window_size(1920,1080)
#最大化窗口
driver.maximize_window()
#截屏
driver.save_screenshot("./baidu.png")
#控制浏览器滚动条
driver.execute_script("window.scrollBy(0,1000)")#向右滚0,向下滚1000
2.6、退出
#退出当前界面
driver.close()
#突出浏览器
driver.quit()
参考链接
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。