Python中如何使用request-html库对页面上的“对象”进行点击操作?
以前用 selenium 时:
driver.find_element_by_id('tabmenuA').click()
time.sleep(1)
OtherHtmlPage = driver.page_source
这样就获得了 OtherHtmlPage 这个经过点击表格 tab,然后也经过 WebDriver 渲染的页面代码了
不清楚 request-html 库能不能这么操作? 看过官方的文档,好像也没这样的例子...,只是知道作者在 request 的基础上似乎能对网页渲染支持很好...
Python中如何使用request-html库对页面上的“对象”进行点击操作?
5 回复
不支持的,老老实实用 selenium。
from requests_html import HTMLSession
# 创建会话
session = HTMLSession()
# 访问目标页面
response = session.get('https://example.com/login')
# 方法1:通过CSS选择器点击
login_button = response.html.find('#login-btn', first=True)
if login_button:
login_button.click() # 这会触发点击事件
# 方法2:通过文本内容点击
submit_btn = response.html.find('button', containing='提交')
if submit_btn:
submit_btn.click()
# 方法3:通过XPath点击
search_icon = response.html.xpath('//*[@id="search-icon"]', first=True)
if search_icon:
search_icon.click()
# 方法4:点击后获取新页面内容(重要!)
# 点击操作后需要重新获取页面内容
response = session.get(response.url) # 重新加载当前URL
# 或者使用render()处理JavaScript动态内容
response.html.render() # 这会执行页面上的JavaScript
# 完整示例:模拟登录点击
def click_login():
session = HTMLSession()
# 访问登录页
login_page = session.get('https://example.com/login')
# 填写表单(如果需要)
login_page.html.find('#username')[0].value = 'user123'
login_page.html.find('#password')[0].value = 'pass123'
# 点击登录按钮
login_btn = login_page.html.find('input[type="submit"]', first=True)
if login_btn:
login_btn.click()
# 获取点击后的页面
new_response = session.get(login_page.url)
# 或者使用render()处理动态加载
new_response.html.render()
return new_response.html.text
# 注意:request-html的click()模拟的是前端事件触发
# 对于需要POST请求的表单,可能需要配合表单数据提交
核心就三点:1)用CSS选择器或XPath定位元素,2)调用.click()方法,3)点击后记得用render()或重新获取页面来更新内容。
有些网站需要先处理JavaScript,记得用.render()。
本来就是基于 pyppeteer 做的页面渲染效果,自己魔改一下就可以了。
不要用这种垃圾库,越封装越烂
作者都跑路了, 为什么还要用它… 趁早换个简简单单的 cdp 库吧, 直接注入个 js 就点击了

