我需要从site
获得反馈反馈位于<iframe>
标记内,因此我转到iframe
,我从第一页获得反馈,但之后我需要使用按钮更改页面:
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&ownerMemberId=825321852&companyId=&memberType=seller&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获得下一页的反馈?为什么其他元素会收到点击?
答案 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)