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

Posted

技术标签:

【中文标题】如何使用 selenium 更改元素类属性值【英文标题】:How to change element class attribute value using selenium 【发布时间】:2017-01-18 23:26:35 【问题描述】:

我丢失了我的凭据.. 所以我正在创建这个新线程。如果有帮助,这里的老问题: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

【问题讨论】:

【参考方案1】:

来自 cmets:-

您想与具有data-faucet 属性值39274 的元素进行交互吗??

非常好!正是我想做的!

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

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

好的.. 如果我 print(element) 终端显示:&lt;selenium.webdriver.remote.webelement.WebElement (session="d54ae232-6d42-455f-a130-097be89adf1e", element="96385594-1725-4843-bfed-d5a4e7b9af41")&gt;. 现在它实际上选择了一些东西,所以现在我已经选择了它,我如何用“vote-link up voted”替换“vote-link up” “?

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

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

【讨论】:

ok.. 现在如果我 print(element) 终端显示,它实际上会选择一些东西: 。所以既然我已经选择了它,如何将“vote-link up”替换为“vote-link up voted”? 现在尝试使用execute_script() 设置元素的属性值,尝试更新答案并告诉我 只是另一件事......是否可以使用另一个不打开 firefox 浏览器但在后台执行的库来做到这一点?我不想知道怎么做,如果可能的话 是的,可以使用无头浏览器,查看此链接了解更多详情***.com/questions/38549954/… 为了更通用:driver.execute_script("arguments[0].setAttribute(arguments[1], arguments[2])", element, 'class', 'vote-link up voted ')

以上是关于如何使用 selenium 更改元素类属性值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Selenium 和 Java 提取表格元素的 id 属性的动态值

selenium如何获取已定位元素的属性值

如何使用 selenium webdriver、NUnit 和 C# 获取元素属性的子属性值

如何使用 selenium webdriver C# 获取元素样式属性的值

selenium如何获取已定位元素的属性值?

如何在 phpunit selenium 测试中删除元素的属性?