首页 > 解决方案 > 选择一个带有硒的按钮

问题描述

我是 selenium 的新手,我试图弄清楚如何模拟 onclick,这是我在检查 html 源代码时在源代码中看到的内容:

 <div class="btn btn-sm btn-primary" id="bbb_view_results" onclick="showResults();" style="">View Results</div>

我尝试了以下但没有任何效果:

driver.find_element_by_css_selector("div.btn.btn-sm.btn-primary#bbb_view_results[onclick*='showResults()']").click()
driver.find_element_by_xpath("/html/body/div[36]/div[1]/div[2]/div[3]/table/tbody/tr/td[2]/div[1]").click()
driver.find_elements_by_class_name("btn btn-sm btn-primary.bbb_view_results").click()
driver.find_element_by_css_selector('div.btn btn-sm btn-primary').click()
driver.find_element_by_id('bbb_view_results').click()

几乎所有的错误消息都是 NoSuchElementException。一些错误信息:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="bbb_view_results"]"}
  (Session info: chrome=77.0.3865.90)

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[text()='View Results']"}
  (Session info: chrome=77.0.3865.90)
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div.btn btn-sm btn-primary"}

标签: pythonselenium-webdriver

解决方案


driver.find_element_by_class_name('btn.btn-sm.btn-primary').click()

并且

driver.find_element_by_id('bbb_view_results').click()

应该可以正常工作。但也许您需要更改为其他框架,您可以发布完整的 page_source 或 url 吗?


**更新:**

在看到您想要的抓取数据的网址后;

您需要切换框架才能单击按钮。加载整个数据后单击它的正确方法是使用模块:

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

就像是:

WebDriverWait(driver, 10).until(ec.presence_of_element_located((By.ID, 'instance-283000-header')))

但是,我不能让他们在那里工作——所以我用 sleep 来演示。

from selenium import webdriver
from time import sleep

url = 'https://www.flexmls.com/cgi-bin/mainmenu.cgi?cmd=url+other/createlink/link_receiver.html&' \
      'no_html_header=true&i=rgsmmct2qgk,12'
driver = webdriver.Chrome()
driver.get(url)
driver.switch_to.frame('publiclinkpanel')
sleep(10)
driver.find_element_by_class_name('btn.btn-sm.btn-primary').click()
sleep(10)
print(driver.page_source)

推荐阅读