选择带有硒的按钮

时间:2019-10-15 21:02:57

标签: python selenium-webdriver

我是硒的新手,我试图弄清楚如何模拟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"}

1 个答案:

答案 0 :(得分:0)

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')))

但是,我无法让他们在那里工作-所以我用睡眠作示范。

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)