【问题标题】:Python. Selenium misses elementPython。硒缺失元素
【发布时间】:2017-03-31 08:17:34
【问题描述】:

我需要从site获得反馈

反馈在<iframe> 标签内,所以我转到iframe,然后我从第一页获得反馈,但随后我需要使用按钮更改页面:

Selenium 可以通过 class 或 xpath 找到它,但是当它尝试单击时返回错误

selenium.common.exceptions.WebDriverException: Message: unknown error: Element <iframe scrolling="no" frameborder="0" marginwidth="0" marginheight="0" width="100%" height="1943" src="//feedback.aliexpress.com/display/productEvaluation.htm?productId=1000003578539&amp;ownerMemberId=825321852&amp;companyId=&amp;memberType=seller&amp;startValidDate=" cd_frame_id_="9dbc34cc8793cee8fbcab5180296b0d6"></iframe> is not clickable at point (1001, 582). Other element would receive the click: <span data-role="show" class="show-history">...</span>
  (Session info: chrome=56.0.2924.87)
  (Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 6.1.7601 SP1 x86_64)

这是我的代码:

driver = webdriver.Chrome()
driver.get(url)

close_popup = driver.find_element_by_class_name('close-layer')
close_popup.click()

tab_feedback = driver.find_element_by_xpath('//*[@id="j-product-tabbed-pane"]/ul/li[2]')
tab_feedback.click()

driver.switch_to.frame(driver.find_element_by_xpath('//iframe[starts-with(@src, "//feedback.aliexpress.com/display/productEvaluation.htm")]'))

text_feedbacks = driver.find_elements_by_class_name('buyer-feedback')

next = driver.find_element_by_class_name('ui-pagination-next ui-goto-page')
next.click()

我认为可能是 selenium 太快了,我尝试等待并循环但仍然无法获得下一页的反馈。我也尝试使用 xpath 获取此元素:

next = driver.find_element_by_xpath( "//div[@class='ui-pagination-navi util-left']/a[@class='ui-goto-page']")

但没有任何帮助。

如何使用 selenium 获得下一页的反馈?为什么其他元素收到点击?

【问题讨论】:

    标签: python selenium iframe xpath


    【解决方案1】:

    尝试使用以下代码:

    from selenium.webdriver.common.keys import Keys
    
    driver.switch_to.frame(driver.find_element_by_xpath('//iframe[starts-with(@src, "//feedback.aliexpress.com/display/productEvaluation.htm")]'))
    
    text_feedbacks = driver.find_elements_by_class_name('buyer-feedback')
    driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
    next = driver.find_element_by_link_text("Next")
    next.click()
    driver.switch_to.default_content()
    

    问题在于 span "Recently viewed" 元素与所需按钮重叠,因此拦截了点击...您可能只需要稍微滚动页面(在提供的代码中 - 通过模拟 Page Down 按钮按下)

    注意点击"Next"按钮后应该从iframe切换回来

    【讨论】:

    • 它找到了元素,但是当点击返回相同的错误时 在点 (1009, 590) 是不可点击的。其他元素会收到点击:...
    • 是的,我现在明白了...添加了一些小技巧;)尝试更新。
    • 它正在工作,谢谢!问题的原因是什么?为什么其他元素收到点击?
    • 我已添加澄清以回答。这是因为页面右下角的"Recently viewed" 选项卡覆盖了所需的按钮
    【解决方案2】:

    您需要为每个tab_feedback.click() 设置延迟,因为页面尚未完全加载。

    import time
    time.sleep(5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 2023-02-11
      • 1970-01-01
      相关资源
      最近更新 更多