蟒蛇。 Selenium错过了元素

时间:2017-03-31 08:17:34

标签: python selenium iframe xpath

我需要从site

获得反馈

反馈位于<iframe>标记内,因此我转到iframe,我从第一页获得反馈,但之后我需要使用按钮更改页面:

enter image description here

Selenium可以通过类或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()

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

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

但没有任何帮助。

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

2 个答案:

答案 0 :(得分: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按钮)

请注意,您应该在点击iframe按钮

后从"Next"切换回来

答案 1 :(得分:0)

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

import time
time.sleep(5)