硒找不到元素

2024-04-26 08:08:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图选择一个文本框并通过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"))

有什么特别的$和字符是字段吗?为什么硒不能定位这些元素?


Tags: namedividfalsegosearchdriverelement
3条回答

解决方案:确保你在正确的窗口。在这一步之前,我点击了一个链接,打开了一个新窗口,我假设这个窗口会自动成为活动窗口。

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

driver.window_handles

这将返回一个列表。请注意要更改为的窗口和索引i。若要更改窗口,请运行:

driver.switch_to_window(driver.window_handles[i])

这个想法在下面。如果您无法按全名定位元素,我将尝试按部分名称定位它。 所以我会尝试这种方法:

包含“t”的元素的属性A

xpath: //E[包含(@A,'t')]/@A⌦{Se://E[contains(@A,'t')]@A

css: 钠硒 取here

所以有点

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

这样的话,我通常会在我对定位器不自信的情况下进行验证: enter image description here

在第二行中,在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')

相关问题 更多 >