python - 选择一个带有硒的按钮
问题描述
我是 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"}
解决方案
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)
推荐阅读
- reactjs - 如何通过锚标签传递道具?
- android - 使用 ImagePicker 库从图库上传图像并使用 Glide 库在 ImageView 中设置
- c# - 从 RDB 文件中读取数据
- ios - 将观察者添加到自身或对象有什么区别?
- node.js - Sequelize `findOne` 工作不如预期
- python - 为什么我的 Django 应用程序停止在 App Engine 环境中构建
- javascript - 如何使用 vscode 重新排序参数?
- java - JHipster:没有身份验证的 Web 服务
- java - 试图在单独的行上打印字符串中的一个单词
- javascript - 云函数 onUpdate:无法读取未定义的属性“forEach”