【问题标题】:How to click a button to vote with python如何点击按钮用python投票
【发布时间】:2017-01-18 09:06:33
【问题描述】:

我正在用 Python 练习网页抓取。我想在一个投票项目的网站上按下一个按钮。 这是代码

<html>
<head></head>
<body role="document">
<div id="static page" class="container-fluid">
<div id="page" class="row"></div>
<div id="faucets-list">
<tbody>
<tr class=""></tr>
<tr class=""></tr>
<tr class=""></tr>
<tr class=""></tr>
# an infinite number of nodes, until there's mine
<tr class="">
<td class="vote-col">
<div class="vote-box">
<div class="vote-links">
<a class="vote-link up" data-original-title="I like this faucet" href="#" data-faucet"39274" data-vote"up" data-toggle"tooltip" data-placement="top" title=""></a>

这是最后一部分,但是当我手动单击按钮时:

<a data-original-title="I&nbsp;like&nbsp;this&nbsp;faucet" href="#" class="vote-link up voted" data-faucet="39274" data-vote="up" data-toggle="tooltip" data-placement="top" title=""></a>

我可以用 python 中的脚本模拟它吗?我还是个新手,最近开始学习python。 P.S:网站是https。而且我不能使用 http,因为它会强制在 https 中重定向。

--UDPATE-- 我正在尝试使用硒..

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://faucetbox.com/en/list/BTC")
element = driver.find_element_by_css_selector(".vote-link.up")
element_attribute_value = element.get_attribute("data-faucet")
if element_attribute_value == "39274":
    print ("Value: {0}".format(element_attribute_value))
driver.quit()

但是由于每次投票有多个数字,它总是显示第一个...所以它永远不会打印那个打印...我该怎么做才能选择我的 html 源代码行结束替换它到我想要的行?

【问题讨论】:

标签: python python-3.x web-scraping


【解决方案1】:

您可能想查看Selenium。它是 python 的一个模块,可让您自动执行上面提到的任务。试试这样的:

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("https://faucetbox.com/en/list/BTC")
elements = driver.find_elements_by_css_selector(".vote-link.up")
for element in elements:
    element_attribute_value = element.get_attribute("data-faucet")
    if element_attribute_value == "39274":
        print("Value: {0}".format(element_attribute_value))
        element.click()
        break
driver.quit()

你做的和我做的区别在于我使用了find_elements_by_css_selector方法而不是find_element_by_css_selector。前者返回与 css 选择器匹配的所有元素的列表,而后者只返回第一个匹配的元素。然后我只是用一个简单的for 循环遍历了该列表,并使用了与您所做的相同的检查。我还单击了循环中的元素。希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2019-03-22
    • 1970-01-01
    相关资源
    最近更新 更多