目前我正试图从网上抓取一些信息,但我有点陷入了死胡同。
因此,为了获得我想要的数据,我需要从列表中选择正确的货币。我单击链接以更改货币,然后通过 Java 脚本,该网站获得了另一段包含列表的 html 并打开了一个叠加层,我可以在其中选择正确的货币。
我试图找到存储列表的 div:
driver.find_elements_by_xpath("//html/body/div[19]/div[2]/div/div/div[2]/form/div[2]")
我尝试了列表本身,但无法找到该元素。
然后我想看看是否找到了一些东西并使用以下内容:
len(driver.find_elements_by_xpath("//html/body/div[19]/div[2]/div/div/div[2]/form/div[2]"))
提供了答案 0,因此我的网络驱动程序无法找到新添加的 html block 。
这是新添加的html:
<div class="module">
<div class="modal_mask" style="opacity: 0.5;"/>
<div class="modal_scroller">
<div class="modal_container" style="margin-top: 164.5px;">
<div class="modal_ship" style="margin: 0px auto;">
<div class="modal_title">
Address Currency
<i onclick="modal_remove();">×</i>
</div>
<div class="modal_ship_con">
<h3>Please select your shipping destination & currency</h3>
<p>Price may differ based on your Shipping destination.</p>
<form action="#" method="get">
<input value="81" name="country_sel" type="hidden"/>
<input value="USD" name="currency_sel" type="hidden"/>
<div class="currency">
<b>Currency:</b>
<div class="currency_list">
<div class="active">
<i class="arrow_a">
<i/>
</i>
<span>
USD
<u>US$</u>
</span>
</div>
<div class="currency_box" style="display: none;">
<ul>
<li sel="USD">
USD
<u>US$</u>
</li>
<li sel="EUR">
EUR
<u>€</u>
</li>
<li sel="GBP">
GBP
<u>£</u>
</li>
<li sel="AUD">
AUD
<u>AU$</u>
</li>
<li sel="CAD">
CAD
<u>CA$</u>
</li>
</ul>
</div>
</div>
</div>
<div class="submit">
<input onclick="saveShip(0);" value="Save" type="button"/>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
这是我必须点击的地方:
<div class="active">
<i class="arrow_a">
<i/>
</i>
<span>
USD
<u>US$</u>
</span>
</div>
那么现在我的问题是:是否有可能获得新添加的 html 代码?是否有类似“刷新网络驱动程序”的东西?
问候
最佳答案
我认为您可以在 try catch 要单击的按钮之前简单地使用 time.sleep()。
只需使用这个:
import time
time.sleep(2) #you can keep this behind the code for clicking the button
这会让 selenium 等待一段时间,以便代码可以加载,然后只有 selenium 会点击它
您可以保留任何编号。秒而不是 2,我只是举个例子
关于javascript - Webdriver 找不到 "new loaded element"的 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45653070/