javascript - 单击 Javascript 链接以在 Python 中发出发布请求

标签 javascript python selenium beautifulsoup python-requests

我正在编写一个网络爬虫/自动化工具。本工具需要使用POST请求来提交表单数据。最后的操作使用此链接:

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

从此表单提交数据:

<input name="sem_ad_group__destination_url" type="text" maxlength="1024" id="sem_ad_group__destination_url" class="TextValueStyle" style="width:800px;">

我一直在使用请求和 BeautifulSoup。我知道这些库不能与 Javascript 交互,人们推荐 Selenium。但据我所知,Selenium 不能做 POST。我该如何处理?是否可以像 Selenium 那样在不打开实际浏览器的情况下进行操作?

最佳答案

是的。您完全可以通过向正确的 url 提交 POST 来完全复制链接的功能(实际上,这最终将与单击链接时触发的 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)

如果您无法弄清楚它实际发布到哪个 url,只需在您自己手动单击链接的同时监视网络选项卡(在 chrome 开发工具中),您应该能够找到正确的请求并拉取任何信息。

祝你好运!

关于javascript - 单击 Javascript 链接以在 Python 中发出发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954723/

相关文章:

javascript - jQuery 将段落的内容放入文本区域

javascript - 如何将多个简单参数从 AngularJS 传递到 Web API(使用 $resource)

ruby - 如何使用 Capybara/Ruby 测试与页面上相同正则表达式匹配的多个字符串实例

python - 谷歌阻止 Selenium Webdriver

JavaScript JSON 输出到 &lt;textarea&gt; 或 <div>

python - 如何从 asyncio 中的信号处理程序捕获自定义异常?

python - 如何从 ReQL 查询中获取数据库和表名

python - 如何有效地向量化函数并从中检索值

java - Java-selenium 上的 StaleElementReferenceException 错误

javascript - 如何使用 ajax-jquery 将选定的复选框数据获取到使用 PHP-CodeIgniter 的模态