zoukankan      html  css  js  c++  java
  • chromedriver驱动的浏览器和真实浏览器之间的差异

    一. 打印百度首页底部的声明

    如图,想打印@2018 Baidu...后面的一长串文字,可以通过class name定位的形式

    可以看出,只有一个class name是"copyright-text"的元素

    二. 代码实现

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    time.sleep(2)
    
    #class="copyright-text" 元素的文本信息
    data = driver.find_element_by_class_name("copyright-text").text
    #打印信息
    print(data)
    time.sleep(3)
    
    driver.quit()

    运行结果报错了:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:

    大意是元素定位失败,找不到class为"copyright-text"的元素

    D:Programpython34python.exe D:/python_workshop/python6/selenium_webdriver/test_9.py
    Traceback (most recent call last):
      File "D:/python_workshop/python6/selenium_webdriver/test_9.py", line 11, in <module>
        data = driver.find_element_by_class_name("copyright-text").text
      File "D:Programpython34libsite-packagesseleniumwebdriver
    emotewebdriver.py", line 555, in find_element_by_class_name
        return self.find_element(by=By.CLASS_NAME, value=name)
      File "D:Programpython34libsite-packagesseleniumwebdriver
    emotewebdriver.py", line 955, in find_element
        'value': value})['value']
      File "D:Programpython34libsite-packagesseleniumwebdriver
    emotewebdriver.py", line 312, in execute
        self.error_handler.check_response(response)
      File "D:Programpython34libsite-packagesseleniumwebdriver
    emoteerrorhandler.py", line 242, in check_response
        raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"copyright-text"}
      (Session info: chrome=66.0.3359.139)
      (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 6.1.7600 x86_64)
    
    
    Process finished with exit code 1

    三. 原因分析

    检查chromedriver驱动的浏览器,发现百度首页底部的那一串声明竟然跑到下一行去了,而且是id="cp",用的是id选择器而非class,看来驱动浏览器和真实浏览器同一地方的元素、属性可能会有差异,此时需要修改代码了

    四. 修改代码和总结

    from selenium import webdriver
    import time
    
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    time.sleep(2)
    
    #class="copyright-text" 元素的文本信息
    data = driver.find_element_by_id("cp").text  #修改部分
    #打印信息
    print(data)
    time.sleep(3)
    
    driver.quit()

    运行结果:

    ©2018 Baidu 使用百度前必读 意见反馈 京ICP证030173号  京公网安备11000002000001号 

    总结:如果发现定位不到元素,应该第一时间检查驱动浏览器相同地方的元素和属性,和真实浏览器做对比

  • 相关阅读:
    javascript运行机制之执行顺序详解
    js常见错误类型
    原生JS添加类名 删除类名
    innerHTML、innerText和outerHTML、outerText的区别
    cmd应用基础教程
    ASIC中的一些库和文件类型
    VCS中的覆盖率分析
    NC_Verilog中的工具ICC
    UVM中的sequence使用(一)
    UVM中的regmodel建模(三)
  • 原文地址:https://www.cnblogs.com/my_captain/p/9224671.html
Copyright © 2011-2022 走看看