暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

selenium的使用:爬虫/自动化测试

一叶扁舟 2021-01-19
1148

image.png

一、概述

1.1、概述

  • 使用场景:

​ 1、需要自动化登录,无法获取长期cookie或token时(登陆遇到扫码,输入验证码等)。

​ 2、获取网页中ajax(异步加载)数据时,先找接口,如果接口加密,则使用selenium.

  • 异步加载案例:

​ 案例:获取腾讯云的ecs时,需要获取各个地区数据,各个地区需要点击才会显示对应的数据,并且点击后网页不变。

​ 分析:典型的异步加载数据,第一步去找存储数据的接口,由于接口加密,因此需要用selenium.

  • selenium的优势

​ selenium可以使用element=driver.page_source,获得的element是js渲染过的数据。可以直接xpath获取即可。

1.2、Mac配置chromedriver

二、使用流程

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论