如何使用selenium更改元素类属性值

2024-06-07 10:39:40 发布

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

我丢了证件。。所以我正在创建这个新线程。如果有帮助的话,这里的老问题是:How to click a button to vote with python

我想换一行:

<a data-original-title="I&nbsp;like&nbsp;this&nbsp;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&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=""><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>

网站是这样的:https://faucetbox.com/en/list/BTC


Tags: divdatatitledriverlinkattributeelementtr
1条回答
网友
1楼 · 发布于 2024-06-07 10:39:40

评论:

Do you want to interact with element which has data-faucet attribute value 39274??

exatly! just what I want to do!

您应该尝试使用css_selector,如下所示:

element = driver.find_element_by_css_selector(".vote-link.up[data-faucet = '39274']")

ok.. now it selects something in fact if I print(element) terminal shows: <selenium.webdriver.remote.webelement.WebElement (session="d54ae232-6d42-455f-a130-097be89adf1e", element="{96385594-1725-4843-bfed-d5a4e7b9af41}")>. so now that I've selected it, how can I replace "vote-link up" with "vote-link up voted"?

可以使用execute_script()替换class属性值,如下所示:

driver.execute_script("arguments[0].setAttribute('class','vote-link up voted')", element)

相关问题 更多 >

    热门问题