我正在尝试使用Selenium自动化一些东西,但是我在查找特定元素时遇到了一些麻烦。我使用相同的方法在不同的页面上定位了数百个其他元素,但由于某种原因,这个元素不希望被定位。我想也许是因为页面上的HTML而不是python脚本?虽然我无法更改HTML,但如果是这种情况,我将需要以某种方式找出解决方法。
我在一个名为“index.html”的python所在目录下的文件中得到了测试HTML
以下是代码:
<body>
<tbody>
<tr><td class="rd-xc-Kd-kl-lf"><table style="position: relative; left: 0px;" id=":a" class="rd-xc-Kd-kl" cellpadding="0" cellspacing="0"><tbody><tr><td><div class="rd-xc-Kd-Bj-Gm">Drag a photo here</div><div class="rd-xc-Kd-Bj-Fm">Or, if you prefer...</div><div id=":d"><div style="-moz-user-select: none;" role="button" class="a-b-c d-u d-u-F">Select a photo from your computer</div></div> </td></tr></tbody></table><div id=":c" style="display:none" class="d-Zb rd-jl-Ub-Yd"><div class="rd-jl-Li">Uploading...</div><div aria-valuenow="0" aria-live="polite" role="progressbar" class="a-b-c Ub-Vb-Wb rd-d-Yb-Zb"><div style="width: 0%;" class="Ub-Vb-O"></div></div></div></td></tr>
</tbody>
</body>
(这只是从YouTube / Google +拖放图片上传表单中获取的一些代码。我正在尝试每周自动更新我的封面照片)
这是我的测试python代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver import ActionChains
import os
driver = webdriver.Firefox()
driver.implicitly_wait(20)
driver.get(os.getcwd()+"\index.html")
element = driver.find_element_by_xpath("//td[@class='rd-xc-Kd-kl-lf']")
print element
print element.text
我得到的错误是NoSuchElementException,如下所示:
NoSuchElementException: Message: u'Unable to locate element:{"method":"xpath","selector":"//td[@class=\'rd-xc-Kd-...\']"}' ; Stacktrace: at FirefoxDriver.prototype.findElementInternal...
我不确定从哪里开始解决这个问题。 我尝试使用其他选择器,例如find_element_by_id用于id“id =':a'”,但这也不起作用。
感谢任何帮助。
答案 0 :(得分:2)
您是否尝试过在Firefox中使用xpath检查程序?这对我来说无疑是有帮助的。 https://addons.mozilla.org/en-US/firefox/addon/xpath-checker/?id=1095
另外,您可以尝试:
driver.find_element_by_class_name('rd-xc-Kd-Bj-Gm')