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 就点击了

回到顶部