selenium的问题


为什么if语句在定位元素下一行如图一,得到的结果是报错如图二?

img

img

 当if语句在定位元素上一行,就不会报错,会正常运行,如图三,问题出在哪里?

img

看起来没啥问题呀,但是报错说没找到,你试试先sleep等待2秒然后再处理,是不是就好了

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7668864
  • 你也可以参考下这篇文章:Selenium:定位(二:By模块定位,简单无基础)
  • 除此之外, 这篇博客: Selenium 高级点儿的技能都有啥???中的 指定元素截图 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 元素截图,其实是配合另一个库完成的,该库为 pillow,专门用于处理图像的库。

    通过 pip install pillow 安装新库。

    接下来以途牛旅游网注册页面为例,给你演示一下如何截取指定元素。注意下面代码获取网页元素坐标的方法,后来发现方法不是很好用,进行了 N 多的尝试,试出来的数字。不同的网站解决办法不同,可以自行试一下。

    from selenium import webdriver
    import time
    from PIL import Image
    driver = webdriver.Firefox()
    driver.maximize_window()
    # 打开注册页面
    driver.get('https://passport.tuniu.com/register')
    time.sleep(3)
    # 截取全屏
    driver.save_screenshot("./tuniu.png")
    # 找到验证码区域 identify_img
    code = driver.find_element_by_id("identify_img")
    # 获取元素在网页中的坐标,这个地方通过代码不太准确,尝试了多次取值
    left = 1040 # code.location['x']
    up = 590 #code.location['y']
    
    print(code.size["width"],code.size["height"])
    
    right = left + code.size["width"]
    below = up + code.size["height"]
    
    im = Image.open('./tuniu.png')
    im = im.crop((left, up, right, below))
    im.save("./code.png")
    driver.quit()
    

    拿到验证码图片之后,可以通过一些打码平台实现自动登录某些网站。