学习爬虫第八天 selenium

学习爬虫第八天 selenium

1. Selenium

1-1 .介绍

介绍:
selenium是⼀个web的⾃动化测试⼯具,最初是为⽹站⾃动化测试⽽开发的,selenium可以直接运⾏在浏览器上,它⽀持所有主流的浏览器,可以接收指令,让浏览器⾃动加载⻚⾯,获取需要的数据,甚⾄⻚⾯截屏.

常见浏览器与其driver:

1-2. 安装

库安装: pip install selenium
driver通用安装方法:

  1. 官网下载驱动zip文件
  2. 解压压缩包
  3. 剪贴.exe文件
  4. 找到Python安装文件夹目录
  5. 粘贴到python同级目录下

2. Selenium 使用

2-1. 简单使用案例:

常规使用:

from selenium import webdriver

# 实例化浏览器
driver = webdriver.Chrome()

# 发送请求
driver.get('https://www.baidu.com')

# 退出浏览器
driver.quit()

不显示浏览器(浏览器静默)使用:

from selenium import webdriver

option = webdriver.ChromeOptions()
option.add_argument('headless')

# 实例化浏览器
driver = webdriver.Chrome(chrome_option=option)

# 发送请求
driver.get('https://www.baidu.com')

# 退出浏览器
driver.quit()

2-2. 定位元素

2-2-1. 根据id来查找某个元素

根据id来查找某个元素: find_element_by_id

使用示例:

submitTag = driver.find_element_by_id('su')		# 方法1
submitTag = driver.find_element(By.ID,'su')		# 方法2

2-2-2. 根据类名查找元素

根据类名查找元素: find_element_by_class_name

使用示例:

submitTag = driver.find_element_by_class_name('su')		# 方法1
submitTag1 = driver.find_element(By.CLASS_NAME,'su')	# 方法2

2-2-3. 根据name属性的值来查找元素

根据name属性的值来查找元素: find_element_by_name

使用示例:

submitTag = driver.find_element_by_name('email')	# 方法1
submitTag1 = driver.find_element(By.NAME,'email')	# 方法2

2-2-4. 根据标签名来查找元素

根据标签名来查找元素: find_element_by_tag_name

使用示例:

submitTag = driver.find_element_by_tag_name('div')	# 方法1 
submitTag1 = driver.find_element(By.TAG_NAME,'div')		# 方法 2

2-2-5. 根据xpath语法来获取元素

根据xpath语法来获取元素: find_element_by_xpath

使用示例:

submitTag = driver.find_element_by_xpath('//div')	# 方法1 
submitTag1 = driver.find_element(By.XPATH,'//div')	# 方法2

2-2-6. 根据css选择器选择元素

根据css选择器选择元素: find_element_by_css_selector

使用示例:

submitTag = driver.find_element_by_css_selector('//div')	# 方法1
submitTag1 = driver.find_element(By.CSS_SELECTOR,'//div')	# 方法2

2-2-7. 备注:

find_element 是获取第⼀个满⾜条件的元素。find_elements 是获取所有满⾜条件的元素

2-3. 操作表单元素

2-3-1. 操作步骤:

  1. 找到这个元素
  2. 使用send_keys(value),将数据填充出去
inputTag = driver.find_element_by_id('kw')
inputTag.send_keys('python')

2-3-2. 其它常用方法

  • clear方法可以清楚输入框中的内容
inputTag.clear()
  • 操作checkbox:
    步骤:
    1. 选中checkbox标签
    2. 执行click事件
rememberTag = driver.find_element_by_name("rememberMe")		# 选中标签
rememberTag.click()		# 执行事件
  • 操作按钮: click()
inputTag = driver.find_element_by_id('su') 2 inputTag.click()
  • 选择select:
    备注:select元素不能直接点击。因为点击后还需要选中元素。这时候selenium就专⻔为select标签提供了⼀个类

    selenium.webdriver.support.ui.Select。将获取到的元素当成参数传到这个类 中,创建这个对象。以后就可以使⽤这个对象进⾏选择了。

    https://www.17sucai.com/boards/53562.html

2-4. 行为链(不常用)

2-4-1. 介绍:

介绍:
有时候在⻚⾯中的操作可能要有很多步,那么这时候可以使⽤⿏标⾏为链类ActionChains来完成。⽐如现在要将⿏标移动到某个元素上并执⾏点击事件。

2-4-2. 常用方法

常用方法:

actions = ActionChains(driver)
actions.move_to_element(inputTag) 
actions.send_keys_to_element(inputTag,'python') 
actions.move_to_element(submitTag)actions.context_click()
actions.click(submitTag)
actions.perform()

更多鼠标点击操作:

2-5. Cookie操作

2-5-1. 获取所有的cookie

cookies = driver.get_cookies()

2-5-2. 根据cookie的name获取cookie

value = driver.get_cookie(key)

2-5-3. 删除某个cookie

driver.delete_cookie('key')

2-6. 页面等待

2-6-1. 介绍

介绍: 现在的⽹⻚越来越多采⽤了Ajax 技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际⻚⾯等待时间过⻓导致某个dom元素还没出来,但是你的代码直接使⽤了这个WebElement,那么就会抛出NullPointer的异常。为了解决这个问题。所以Selenium 提供了两种等待⽅式:⼀种是隐式等待、⼀种是显式等待。

2-6-2. 隐式等待

介绍: 调⽤driver.implicitly_wait。那么在获取不可⽤的元素之前,会先等待10秒中的时间。

使用方法:

driver.implicitly_wait(10)

2-6-3. 显示等待

介绍:
显示等待是表明某个条件成⽴后才执⾏获取元素的操作。也可 以在等待的时候指定⼀个最⼤的时间,如果超过这个时间那么就抛出⼀个异常。显示等待应该使⽤
selenium.webdriver.support.excepted_conditions期望的条件和selenium.webdriver.support.ui.WebDriverWait来配合完成。

使用示例:

from selenium import webdriver 
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")

try:
	element = WebDriverWait(driver, 10).until(
		EC.presence_of_element_located((By.ID, "myDynamicElement")) 
)
finally:
driver.quit()

2-6-4. 一些其他的等待条件

  • presence_of_element_located:某个元素已经加载完毕了。
  • presence_of_all_elements_located:⽹⻚中所有满⾜条件的元素都加载完毕了。
  • element_to_be_clickable:某个元素是可以点击了。

更多条件请参考:
http://selenium-python.readthedocs.io/waits.html

2-7. 打开窗口和切换页面

介绍:
有时候窗⼝中有很多⼦tab⻚⾯。这时候肯定是需要进⾏切换的。selenium提供了⼀个叫做switch_to_window来进⾏切换,具体切换到哪个⻚⾯,可以从driver.window_handles中找到。

使用示例:

# 打开⼀个新的⻚⾯
driver.execute_script("window.open('url')")

print(driver.current_url)
# 切换到这个新的⻚⾯中
driver.switch_to_window(self.driver.window_handles[1])

3. phantomjs 工具 (即将淘汰)

3-1. phantomjs 介绍

Phantomjs介绍: Phantomjs是⼀个基于webkit的"⽆界⾯"浏览器,它会把⽹站加载到内存并执⾏⻚⾯上的JavaScript

3-2. phantomjs 安装

下载地址: https://npm.taobao.org/

安装方法:

  1. 官网下载驱动zip文件
  2. 解压压缩包
  3. 剪贴.exe文件
  4. 找到Python安装文件夹目录
  5. 粘贴到python同级目录下

3-3. Phantomjs 简单使用

案例示例:

# 1. 加载网页
from selenium import webdriver
driver = webdriver.PhantomJS("安装目录")  (python目录下,无需指定)
driver.get("https://www.baidu.com")
driver.save_screenshot("baidu.png")		# 截图

# 2. 定位和操作
driver.find_element_by_id("kw").send_keys("长城")	# 找到输入框并输入"长城"
driver.find_element_by_id("su").click()		# 点击 百度一下

# 3. 查看请求信息
driver.page_source()	# 获取页面信息
driver.get_cookies()	# 获取cookie
driver.current_url()	# 获取当前url

# 4. 退出
driver.quit()

4. chromedriver 工具

4-1. 介绍:

介绍:
chromedriver是⼀个驱动Chrome浏览器的驱动程序,使⽤他才可以驱动浏览 器。当然针对不同的浏览器有不同的driver。

4-2. chromedriver 安装

下载chromedriver:

’chromedriver’ executable needs to be in PATH`报错解决:
https://www.jianshu.com/p/a383e8970135

安装总结:
https://www.jianshu.com/p/a383e8970135

发布了27 篇原创文章 · 获赞 11 · 访问量 1477

猜你喜欢

转载自blog.csdn.net/weixin_45550881/article/details/104295695