• 爬虫第十天(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,等等。

     

  • 相关阅读:
    线性代数基础知识的复习
    第一个机器学习算法:线性回归与梯度下降
    初识机器学习
    VScode中LeetCode插件无法登录的情况
    内存管理-内存管理功能
    分组密码
    Linux进程调度
    进程调度
    死锁
    临界区和缩
  • 原文地址:https://www.cnblogs.com/tommyngx/p/11127907.html
Copyright © 2020-2023  润新知