硒没有找到元素

时间:2012-10-20 21:28:59

标签: python selenium webdriver selenium-webdriver

我正在尝试选择文本框并通过selenium web驱动程序在其中输入文本。 html如下:

</div><div>
    <input name="mLayout$ctl00$ctl00$6$16$ctl00$Database" type="text" value="Enter database name" maxlength="175" size="26" id="mLayout_ctl00_ctl00_6_16_ctl00_Database" accesskey="s" title="Go search this database" class="InputContent GhostText" onfocus="SearchBoxOnFocus(&#39;mLayout_ctl00_ctl00_6_16_ctl00_Database&#39;);" onkeypress="if(!__TextBoxOnKeyPress(&#39;mLayout$ctl00$ctl00$6$16$ctl00$GoButton&#39;,event.which)) { return false; }" />&nbsp;<input type="image" name="mLayout$ctl00$ctl00$6$16$ctl00$GoButton" id="mLayout_ctl00_ctl00_6_16_ctl00_GoButton" title="Go search database" src="http://images-statcont.westlaw.com/images/go_v602.gif" alt="Go search database" align="absmiddle" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;mLayout$ctl00$ctl00$6$16$ctl00$GoButton&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" style="height:18px;width:21px;border-width:0px;" />
</div><div>

我尝试了以下

driver.find_element_by_id("mLayout_ctl00_ctl00_6_16_ctl00_Database")
driver.find_element_by_name("mLayout$ctl00$ctl00$6$16$ctl00$Database")
dbElement = WebDriverWait(driver, 20).until(lambda x : x.find_element_by_id("mLayout_ctl00_ctl00_6_16_ctl00_Database"))

$和_字符是否有特殊字段?为什么硒不能找到这些元素?

3 个答案:

答案 0 :(得分:4)

解决方案:确保您在正确的窗口中。在此之前的步骤中,我点击了一个打开新窗口的链接,我假设该窗口将自动成为活动窗口。

要查看哪些窗口可用,请运行:

driver.window_handles

返回一个列表。使用索引i注意要更改的窗口。要更改窗口,请运行:

driver.switch_to_window(driver.window_handles[i])

答案 1 :(得分:0)

find_element_by_name(""

之后,您的第二行还有另外的双引号
driver.find_element_by_name(""mLayout$ctl00$ctl00$6$16$ctl00$Database")

将其更改为

driver.find_element_by_name("mLayout$ctl00$ctl00$6$16$ctl00$Database")

并且每当不确定$_时,请使用单引号,这样的话

driver.find_element_by_name('mLayout$ctl00$ctl00$6$16$ctl00$Database')

答案 2 :(得分:0)

这个想法如下。如果您无法按名称找到元素,我会尝试通过名称的部分找到它。 所以我会尝试这种方法:

元素的属性A,其中A包含't'

<强>的xpath : // E [包含(@ A,'t')] / @A⌦{Se://E[contains(@A,'t')]@A}

<强> CSS : NA {Se:css=E[A*='t']@A} 采取here

所以它是

driver.find_element_by_xpath("input[contains(@name,'ctl00$Database')]@name")

通过这种方式我通常会验证我对我的定位器没有信心的情况: enter image description here