(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#test2;https://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,等等。