web-dev-qa-db-ja.com

セレンを使用して要素クラスの属性値を変更する方法

資格情報を失ったので、この新しいスレッドを作成します。それが役立つ場合、ここで古い質問: ボタンをクリックして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 upvote-link up votedに変更するように設定されます。

しかし問題は、そのサイトでは、投票する項目がいくつかあり、要素「data-faucet」が変更されていることです。このスクリプトを使用する場合:

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

7

コメントから:-

data-faucet属性値39274を持つ要素と対話しますか?

まさに!やりたいことだけ!

以下のようにcss_selectorを使用してみてください:-

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

わかりました。今、print(element)ターミナルが次を表示する場合、実際に何かを選択します:<Selenium.webdriver.remote.webelement.WebElement (session="d54ae232-6d42-455f-a130-097be89adf1e", element="{96385594-1725-4843-bfed-d5a4e7b9af41}")>.選択したので、「投票リンクアップ」を「投票リンクアップ投票」に置き換えるにはどうすればよいですか?

以下のようにexecute_script()を使用してclass属性値を置き換えることができます:-

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