我丢失了凭据..所以我正在创建这个新帖子。如果它有帮助,那么旧的问题在这里:How to click a button to vote with python
我想改变这一行:
<a data-original-title="I like this faucet" href="#" class="vote-link up" data-faucet="39274" data-vote="up" data-toggle="tooltip" data-placement="top" title=""><span class="glyphicon glyphicon-thumbs-up"></span></a>
到此:
<a data-original-title="I like this faucet" href="#" class="vote-link up voted" data-faucet="39274" data-vote="up" data-toggle="tooltip" data-placement="top" title=""><span class="glyphicon glyphicon-thumbs-up"></span></a>
以便将投票设置为vote-link up
更改为vote-link up voted
。
但问题是,在该网站中,有几个项目需要投票,而“数据 - 水龙头”元素会发生变化。如果我使用这个脚本:
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("linkurl")
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()
但它不会打印任何东西,导致第一个属性值有另一个数字。如何使用data-faucet
元素的输入选择我的行,以便我可以将其替换为vote-link up voted
?
我只能做这个硒吗?有没有使用真正的浏览器的另一种方式?
无论如何,这是网页的结构:
<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>
答案 0 :(得分:14)
来自评论: -
是否要与具有
的元素进行交互data-faucet
属性值39274
??exatly!正是我想要做的!
您应该尝试使用css_selector
,如下所示: -
element = driver.find_element_by_css_selector(".vote-link.up[data-faucet = '39274']")
好吧..现在它实际上选择了一些东西,如果我打印(元素)终端显示:
<selenium.webdriver.remote.webelement.WebElement (session="d54ae232-6d42-455f-a130-097be89adf1e", element="{96385594-1725-4843-bfed-d5a4e7b9af41}")>.
所以现在我选择了它,我怎么能用“vote-link”替换“vote-link up”投票“?”
您可以使用class
替换execute_script()
属性值,如下所示: -
driver.execute_script("arguments[0].setAttribute('class','vote-link up voted')", element)