【问题标题】:Python+Selenium. Can't locate element蟒蛇+硒。找不到元素
【发布时间】:2017-07-14 05:48:17
【问题描述】:

我已经使用 Python 和 selenium 实现了脚本来点击广告。 但是现在这个脚本不起作用。 无法在页面上找到元素。 请帮助我更正脚本。谢谢!

from selenium import webdriver
import time
browser=webdriver.Firefox()
browser.get('http://rutracker.ignn.ru')
browser.switch_to_frame(browser.find_element_by_xpath('//iframe[starts-with(@class,"tblock_")]'))
browser.find_element_by_xpath("//a[contains(@href,'tmozs.com')]").click()
time.sleep(10)
browser.quit()

【问题讨论】:

  • 请在问题中包含错误。
  • Traceback(最近一次调用最后一次):文件“e:\python\test3.py”,第 5 行,在 browser.switch_to_frame(browser.find_element_by_xpath('//iframe[starts- with(@class,"tblock_")]')) 文件“C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py”,第 293 行,在 find_element_by_xpath 中 return self.find_element(by=By .XPATH, value=xpath) 文件 "C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py",第 752 行,在 find_element 'value': value})['value'] 文件中" C:\Python27\lib\site-packages\selenium\webdriver\remote\webdriver.py",第 236 行,在执行中
  • self.error_handler.check_response(response) 文件“C:\Python27\lib\site-packages\selenium\webdriver\remote\errorhandler.py”,第 192 行,在 check_response 中引发异常类(消息,屏幕,堆栈跟踪)selenium.common.exceptions.NoSuchElementException:消息:无法找到元素://iframe[starts-with(@class,"tblock_")]
  • 安德鲁我检查了网站,你能告诉我 tblock_ 类的 iframe 在哪里
  • Rajan Chahan 早些时候有这样的结构。有一个框架和它的参考。但现在显然已经改变了广告公告的结构。我需要单击 3 个添加中的一个。新增块结构添加下怎么办?

标签: python selenium selenium-webdriver


【解决方案1】:

您可以尝试等待一段时间,直到需要的iframe 出现在DOM 中,然后再切换到它:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as wait

wait(browser, 10).until(EC.frame_to_be_available_and_switch_to_it(browser.find_element_by_xpath('//iframe[contains(@src, "//tmozs.com/")]')))

【讨论】:

    【解决方案2】:

    这是您问题的答案:

    您可以使用下面的代码块点击左上角的广告:

    我专门使用time.sleep() 来减少准备此解决方案的时间。所有time.sleep()都可以替换为Explicit Wait

    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    import time
    
    binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
    driver = webdriver.Firefox(firefox_binary=binary, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe")
    driver.get('http://rutracker.ignn.ru')
    time.sleep(5)
    driver.switch_to.frame(driver.find_element_by_xpath("//iframe[contains(@src,'tmozs.com/jsonp.php')]"))
    time.sleep(5)
    driver.find_element_by_xpath("//div[@class='feed-inner']/div[@class='feed-cell'][1]/a[@class='feed-cell-inner']/div[@class='teaser']/table[@class='teaser-inner']//img[contains(@src,'in.ogoyj.com')]").click()
    time.sleep(5)
    driver.quit()
    

    如果这能回答您的问题,请告诉我。

    【讨论】:

    • @AndrewF。您有机会查看我的答案吗?谢谢
    猜你喜欢
    • 2021-08-06
    • 2016-05-28
    • 2021-06-28
    • 1970-01-01
    • 2021-07-07
    • 2023-02-06
    • 2017-12-01
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多