【问题标题】:selenium python, attempt to click buttonselenium python,尝试单击按钮
【发布时间】:2018-09-05 19:27:39
【问题描述】:

我正在尝试使用以下代码单击“加载更多”按钮

browser.find_element_by_xpath('//*[@id="mainContent"]/div[1]/div/div[5]/div/div[1]').click()
browser.find_element_by_css_selector('#mainContent > div.left-panel > div > div.result-list > div > div.content').click()
browser.find_element_by_link_text('Load More').click()

我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\David\eclipse-workspace\Web_Scrap\setup.py", line 38, in <module>
    browser.find_element_by_css_selector('#mainContent > div.left-panel > div > div.result-list > div > div.content').click()
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Element is not clickable at point (239, 698)
  (Session info: chrome=68.0.3440.106)
  (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.17134 x86_64)

我已经分别尝试了这 3 个,但似乎无法让硒单击按钮

When pressing inspect that is the following element I receive

元素代码如下:

<div class="content" onclick="javascript:mtvn.btg.Controller.sendLinkEvent({ linkName:'PROFMIDPANE:LoadMore', linkType:'o' } );">Load More</div>

如果有人对我如何实现这一点有任何建议,我将不胜感激!

更新: 我尝试了推荐给我的两种解决方案,但不幸的是没有成功,如果有人感兴趣,我会在这里发布。

iamsankalp89 解决方案:

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='content' and text()='Load More']")))
element.click()

错误信息:

Traceback (most recent call last):
  File "C:\Users\David\eclipse-workspace\Web_Scrap\setup.py", line 39, in <module>
    element.click()
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webelement.py", line 628, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
    self.error_handler.check_response(response)
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Element is not clickable at point (239, 698)
  (Session info: chrome=68.0.3440.106)
  (Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),platform=Windows NT 10.0.17134 x86_64)

朱利安莫雷诺解决方案:

ActionChains(driver).move_to_element("//div[@class='content' and text()='Load More']").click("//div[@class='content' and text()='Load More']").perform()

错误信息:

Traceback (most recent call last):
  File "C:\Users\David\eclipse-workspace\Web_Scrap\setup.py", line 42, in <module>
    ActionChains(browser).move_to_element("//div[@class='content' and text()='Load More").click("//div[@class='content' and text()='Load More").perform()
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\common\action_chains.py", line 83, in perform
    action()
  File "C:\Users\David\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\common\action_chains.py", line 293, in <lambda>
    Command.MOVE_TO, {'element': to_element.id}))
AttributeError: 'str' object has no attribute 'id'

【问题讨论】:

  • 欢迎来到 SO!有时这是因为类的重叠而发生的。使用browser.maximize_window() 最大化窗口并重试。这可以帮助你!
  • 我试过做 browser.maximize.windows(),还是没有帮助

标签: python-3.x selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

试试这个 xpath

//div[@class='content' and text()='Load More']

代码是这样的:

browser.find_element_by_xpath('//div[@class='content' and text()='Load More']').click()

也可以使用WebDriverWait

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='content' and text()='Load More']")))
element.click()

【讨论】:

  • 不幸的是我尝试了你的方法我仍然收到一条错误消息,如果你有兴趣,我会将它作为我的问题的更新发布
  • 请告诉我
  • 这里是代码的链接,如果你想自己检查一下,pastebin.com/7gnNKGsN
【解决方案2】:

尝试使用 ActionChains:

类 selenium.webdriver.common.action_chains.ActionChains(driver)

ActionChains(driver).move_to_element(your_element).click(your_element).perform()

移动到元素会将鼠标(光标)移动到元素(your_element)的中间,然后执行函数将执行链接的操作。

编辑

试试这个:

load_more = browser.find_element_by_css_selector("#mainContent > div.left-panel > div > div.result-list > div > div.content")
WebDriverWait(browser, timeout).until(EC.visibility_of(load_more))
browser.execute_script("return arguments[0].scrollIntoView(true);", load_more)
ActionChains(browser).move_to_element(load_more).click().perform()

ActionChains(browser).move_to_element() 接受 WebElement 对象或作为元素 id 的字符串。由于 load more 没有 ID,所以 move_to_element() 找不到 WebElement。

分析网页后,我注意到move_to_element(load_more) 移动到 load_more 按钮(直到它在屏幕内),但它也触发向下滚动并显示网页的页脚。此页脚包含 load_more 按钮。因此,您需要browser.execute_script("return arguments[0].scrollIntoView(true);", load_more),它基本上会一直滚动,直到 load_more 出现(无论页脚是否显示)。

【讨论】:

  • ActionChains(browser).move_to_element("//div[@class='content' and text()='Load More").click("//div[@class='content'和 text()='Load More").perform() (声称它没有定义,即使当我做 ctrl + click 时,它也会显示类)
  • 我已经编辑了我的答案,让我知道你的进度。快乐编码:)
  • 非常感谢!起初它不起作用,一位同学要求我尝试关闭一个导致它不起作用的弹出窗口,所以我按照相同的逻辑操作你给我上的课,效果很好,非常感谢你
猜你喜欢
  • 2016-01-19
  • 1970-01-01
  • 2021-03-18
  • 1970-01-01
  • 2017-06-25
  • 2020-07-28
  • 1970-01-01
  • 2016-10-04
  • 2019-03-17
相关资源
最近更新 更多