【问题标题】:Selenium not performing click actionSelenium 不执行点击操作
【发布时间】:2019-11-21 02:02:50
【问题描述】:

我正在尝试抓取包含多个页面的表格。通过单击“下一页按钮”获得下一页(参见代码 sn-p)。

<a class="botons" id="btn2" href="javascript:void(0)">
 Next Page  
 <i class="fas fa-long-arrow-alt-right"></i>
</a>

Selenium 通过以下代码找到“按钮”并且“点击”没有问题:

btn_next = self.browser.find_element_by_partial_link_text("Next Page")
btn_next.click()

但是,页面只是刷新,表格并没有更新到下一页。

这里有什么问题的线索吗?

编辑:表格可以在https://www.proxy-list.download/HTTPS找到

编辑2:

chrome_options = Options()
chrome_options.add_argument("--enable-javascript")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-gpu")

chrome_options.add_argument("--headless")

【问题讨论】:

  • 至少有两个事件处理程序在那里触发......一个在 标记上......一个打开一个新窗口并将其设置为相同的 URL。另一个放在按钮本身上,并填充表格,但前提是某个 var 的计算结果为 true。 (这可能发生在广告在弹出窗口中加载时)也许尝试在 标记上单击然后单击按钮...或执行 javascript 来设置 var "btn2ena === true"跨度>
  • 您也可以尝试单击它两次...发生这种情况后,您可能还需要将驱动程序切换到新选项卡。 (还需要添加下面答案中列出的等待,因为在页面加载时添加了按钮处理程序......)
  • @pcalkins 这实际上解决了它!谢谢一堆。如果您提交您的 cmets 作为答案,我将接受并关闭此线程。
  • 很高兴听到...继续发布您自己的答案。不确定哪个解决了您的问题。

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

为该按钮分配了一个 id btn2,它也是唯一的。

您应该优先考虑 id 而不是 link Text

也就是说,下一页链接视点中不存在。首先,您必须像这样移动驱动程序的焦点:

wait = WebDriverWait(self.browser,10)
next_page = wait.until(EC.visibility_of_element_located((By.ID, "btn2")))
ActionChains(self.browser).move_to_element(next_page).perform()
next_page.click()  

进口:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC 

【讨论】:

  • 感谢您的意见,但这似乎无法解决问题。问题依旧。
  • 运行后,新标签页打开了?
  • 有时会为广告打开一个新标签。但是硒仍然设法刮掉表格的第一页。所以我怀疑它会导致任何问题?
  • 在我的系统中,执行后它在新标签页中打开,第一个标签页被阻止,我在私有网络中。请您的开发人员(如果可能)在 QA Env 中提供解决方法。
【解决方案2】:

所需元素是启用了JavaScript 的元素,因此要在元素上定位和click(),您必须为element_to_be_clickable() 诱导WebDriverWait,您可以使用以下任一@987654322 @:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.botons[id^='btn2'] i.fas.fa-long-arrow-alt-right"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='botons' and normalize-space()='Next Page']/i[@class='fas fa-long-arrow-alt-right']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

【讨论】:

  • 感谢您的意见,但这似乎无法解决问题。问题依旧。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多