单击Javascript链接在Python中发出post请求

2024-10-01 15:45:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写一个网络垃圾/自动化工具。此工具需要使用POST请求来提交表单数据。最终操作使用以下链接:

<a id="linkSaveDestination" href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("linkSaveDestination", "", true, "", "", false, true))'>Save URL on All Search Engines</a>

提交此表单中的数据:

^{pr2}$

我一直在使用请求和美化组。我知道这些库不能与Javascript交互,人们推荐Selenium。但据我所知,Selenium不能发帖子。我该怎么办?有没有可能像Selenium那样不打开实际的浏览器呢?在


Tags: 工具数据网络idtrue表单链接selenium
2条回答

是的。你完全可以复制链接所做的事情,只需将一篇文章提交到正确的url(实际上,这最终将与单击链接时激发的javascript相同)。在

您可以在请求文档中找到相关部分:http://docs.python-requests.org/en/latest/user/quickstart/#more-complicated-post-requests

所以,对于你的特殊情况,应该是这样的:

payload = {'sem_ad_group__destination_url': 'yourTextValueHere'}
r = requests.post("theActionUrlForTheFormHere", data=payload)

如果你不知道它实际发布到哪个网址,只需监视网络标签(在chrome开发工具中),同时你自己手动点击链接,你应该能够找到正确的请求并从中提取任何信息。在

祝你好运!在

使用selenium你可以在真实的浏览器中模拟真实的用户交互——告诉它定位一个输入,在里面写一个文本,点击一个按钮等等——高级方法——你甚至不需要知道引擎盖下有什么,你就可以看到真正用户看到的内容。这里的缺点是,有一个真正的浏览器参与其中,至少会减慢速度。但是,您可以自动化一个无头浏览器(^{}),或者如果您不具备打开带有UI的浏览器的条件,可以使用^{} virtual framebuffer。示例:

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('url here')

button = driver.find_element_by_id('linkSaveDestination')
button.click()

使用requests+BeautifulSoup,您将进入裸机——使用浏览器开发工具,您可以研究/分析向服务器发出的请求,并在代码中模拟这些请求。有时,页面的构造和请求的方式太复杂而无法自动化,或者使用了反网页刮取技术。在

这两种方法都有利弊——选择哪种方案取决于许多因素。在

相关问题 更多 >

    热门问题