爬虫第十天(02)——selenium

 

(1)selenium一定安装驱动:

Chrome浏览器的驱动安装地址:http://chromedriver.storage.googleapis.com/index.html

驱动一定要,安装相应浏览器的对应版本的驱动。下载之后,将驱动添加至当前路径

如果没有添加驱动,运行selenium程序会:


其原因就是:没有在当前路径放置相应浏览器的驱动

正确做法:

 

(2)浏览器设置:ChromeOptions()

2.1 添加请求头:

#创建Options对象
options = webdriver.ChromeOptions() #添加请求头 options.add_argument('user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"')
#创建驱动
driver = webdriver.Chrome(options=options)

2.2 添加cookie:https://www.cnblogs.com/huangguifeng/p/7858619.html

2.3 设置无头浏览器:

#创建options对象
options = webdriver.ChromeOptions() #设置为无头浏览器 options.add_argument("--headless")
#创建驱动

driver = webdriver.Chrome(options=options)

(3)登录目标URL地址:get("xxx")

#创建驱动
driver = webdriver.Chrome()
#登录百度首页
driver.get("https://www.baidu.com/")

(4)模拟用户使用浏览器操作:

4.0 在进行操作之前,首先一定要做的就是“定位元素”!!!

selenium有很多种元素定位方法:https://www.cnblogs.com/yufeihlf/p/5717291.html#test2https://selenium-python.readthedocs.io/navigating.html

值得注意的是:

  • find_element_by_xxxx(),返回一个元素对象,匹配的是符合条件的所有元素中的第一个元素对象;
  • find_elements_by_xxxx(),返回一个列表list,匹配的是符合条件的所有元素对象

我不建议使用find_element_by_xpath()定位,能用其他方法定位尽量用其他方法

有几个方法,我觉得很好:

  • find_element_by_tag_name()——这个能根据标签自己的名字定位
  • find_element_by_link_text()——这个能根据.text中的内容定位
  • find_element_by_partial_link_text——这个能根据.text中的内容模糊定位
  • 一般大多数都能用by_id,by_name,by_class_name解决

4.1 点击:.click()

4.2 在输入框中输入内容:send_keys()

4.3 清空输入框:clear()

因为send_keys()会在输入框中已有内容后面追加,如果想重新输入新内容,就需要先clear

4.4 输出网页源代码:page_source()  ——不用定位

4.5 截图:save_screenshot() ——也不用定位,截图可以用于查看selenium代码是否达到预期效果

4.6 关闭浏览器:quit() ——不用定位

4.7 如何从父节点获取子节点:

https://blog.csdn.net/huilan_same/article/details/52541680

4.8 如何获取标签属性值:get_attribute("属性名")

https://www.cnblogs.com/tDayUp/p/8733988.html

4.9 获取某个视频的所在地址:

检查网页,发现视频的地址是video标签的src属性

#获取目标网页的视频所在地址
#https://www.ixigua.com/i6709694002595103245/
from selenium import webdriver
import time
import requests

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

time.sleep(10)
div = driver.find_element_by_id("vs")
print(div)
time.sleep(10)
video = div.find_element_by_tag_name("video").get_attribute("src")
print(video)

 建议每一步骤最好都加一个sleep(),我之前没加sleep(),获取div元素对象或者video元素对象时,同一个代码,有时运行良好,有时候却会报错。我猜是因为有时候网慢,页面没有刷新出来,就定位获取了,导致定位失败。

(5)如何下载视频、图片:

5.1 首先要获取目标视频、图片的所在url地址,如4.9中的src

5.2 然后按照正常的,向url发送网络请求,返回response,解析数据,最后将数据使用2进制格式,with open()保存文件即可。

#https://www.ixigua.com/i6709694002595103245/
from selenium import webdriver
import time
import requests


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

time.sleep(10)
div = driver.find_element_by_id("vs")
print(div)
time.sleep(10)
video = div.find_element_by_tag_name("video").get_attribute("src")
print(video)
response = requests.get(video).content
with open("shipin01.mp4", "wb") as f:
    f.write(response)

 注意:视频保存的文件后缀名,一定要是视频格式:mp4,wmv,等等。

 

原文地址:https://www.cnblogs.com/tommyngx/p/11127907.html