• Python爬虫——Selenium 浏览器交互与异常处理


    Python爬虫——Selenium 浏览器交互与异常处理

    1、控制浏览器

    Selenium 可以控制浏览器执行想要的动作,如前进、后退、点击、刷新、输入文本等。

    代码实例(当前 selenium 版本:3.9)

    import time
    
    from selenium import webdriver
    # 浏览器对象
    browser = webdriver.Chrome()
    # 浏览器访问网站
    browser.get('https://www.baidu.com')
    
    # 定位输入框
    input_kw = browser.find_element_by_id('kw')
    
    time.sleep(2)
    
    # 输入'王维家'
    input_kw.send_keys('王维家')
    
    time.sleep(2)
    
    # 清除掉输入框的文本
    input_kw.clear()
    
    time.sleep(2)
    
    # 重新输入
    input_kw.send_keys('毛不易')
    
    # 定位 “百度一下”,并点击,提交搜索,执行搜索操作
    button = browser.find_element_by_id('su')
    button.click()
    
    # 用于提交表单,如搜索框内输入关键字之后的“回车”操作,也可以执行搜索操作
    # input_kw.submit()
    
    time.sleep(2)
    
    # 滚动条拉到底部
    js_bottom = "document.documentElement.scrollTop=100000"
    browser.execute_script(js_bottom)
    
    time.sleep(2)
    
    # 定位“下一页”按钮标签,并点击
    nextPage = browser.find_element_by_xpath('//a[@class="n"]')
    nextPage.click()
    
    time.sleep(2)
    
    # 回到上一页面,后退操作
    browser.back()
    time.sleep(2)
    
    # 使浏览器历史记录前进一步,前进操作
    browser.forward()
    
    time.sleep(2)
    
    # 刷新浏览器当前页面
    browser.refresh()
    
    time.sleep(2)
    
    # 关闭浏览器
    browser.quit()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    上面代码控制浏览器进行的操作:

    1. 控制浏览器打开百度
    2. 在搜索框输入 “王维家”
    3. 清除掉搜索框的文本
    4. 重新输入“毛不易”
    5. 定位 “百度一下”,并点击,提交搜索,执行搜索操作
    6. 将网页的滚动条拉到底部
    7. 点击“下一页”按钮
    8. 执行浏览器回退操作,回到上一步
    9. 执行浏览器前进操作,和上一步相反
    10. 刷新浏览器当前页面
    11. 关闭浏览器

    注意:

    • click() 方法是Selenium WebDriver提供的操作鼠标的方法,其作用是单击已经定位到的节点。

    • .forward() 和 back() 方法表示浏览器前进和后退的功能

    • double_click(),其作用是双击已经定位到的节点。

    • 程序运行中间执行了多次阻塞操作 time.sleep(2)

    2、异常处理

    在使用Selenium的时候,可能会遇到一些异常,例如超时(TimeoutException)、节点未找到(NoSuchElementException)等。一旦出现此类异常,程序便会停止运行。为了让程序不停止运行我们可以使用 try except 语句来捕获各种异常,对异常进行处理。

    模拟节点未找到异常

    from selenium import webdriver
    
    # 声明浏览器对象,并访问网站
    browser = webdriver.Chrome()
    url = "https://www.baidu.com"
    browser.get(url)
    # 查找节点
    element1 = browser.find_element_by_link_text("大地图")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    控制台提示的错误信息:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xC4PYbCO-1660556957741)(D:\学习笔记\笔记图片\Python\QQ截图20220815171437.png)]

    使用 try except 语句来捕获异常

    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    
    browser = webdriver.Chrome()
    url = "https://www.baidu.com"
    
    browser.get(url)
    try:
        element1 = browser.find_element_by_link_text("大地图")
    except NoSuchElementException:
        print("没有找到节点")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行结果:使用 try except 语句来捕获异常后,程序就不会中断了。

    没有找到节点
    
    • 1

    官方文档中对更对异常类的详细介绍

  • 相关阅读:
    [Android N]MediaRecorder系列之StagefrightRecorder录制TS流flow
    Hadoop HA高可用原理介绍
    Jackson 中的 @JsonProperty 和 @JsonAlias 的区别
    CentOS7 安装Oracle RAC 19c PRVF-5493,PRVG-13606 PRVG-1019 的问题解决
    Docker原理与基础命令
    《乔布斯传》英文原著重点词汇笔记(八)【 chapter six 】
    大模型训练为什么用A100不用4090
    Chinese-LLaMA-Alpaca-2模型的测评
    【VUE】sessionStorage存取对象,解决取值为[object,object]
    《致新来的你》
  • 原文地址:https://blog.csdn.net/wpc2018/article/details/126351644