【问题标题】:Can't Change Select Item in Table with Selenium Python无法使用 Selenium Python 更改表中的选择项
【发布时间】:2020-01-31 21:19:15
【问题描述】:

我正在使用一个非常过时的网站,这给我带来了问题。我正在尝试做的是选择“判断/留置权搜索”选项卡,如下所示:page

问题是没有标识符。没有姓名、身份证等。

<table border="0" bgcolor="#ededed" cellpadding="8" cellspacing="0">
<tbody>
<tr>
        <td width="33%" bgcolor="#ededed" nowrap=""><b><font size="+1"><u>Case Search</u></font></b></td>
        <td width="33%" bgcolor="#cccccc" nowrap=""><a href="javascript:submitJudgementSearch();" target="_self"><b><font size="+1">Judgment/Lien Search</font></b></a></td>
        <td width="33%" bgcolor="#cccccc" nowrap=""><a href="javascript:submitPropertySearch();" target="_self"><font size="+1"><b>Property/Lis Pendens Search</b></font></a></td>
</tr>
</tbody>

我尝试过使用 xpath、css 选择器,甚至只是执行脚本。我一直在使用 ChroPath 来获取正确的信息。当&lt;a href="javascript:submitJudgementSearch();" target="_self" xpath="1"&gt;&lt;b&gt;&lt;font size="+1"&gt;Judgment/Lien Search&lt;/font&gt;&lt;/b&gt;&lt;/a&gt; 被选中时,ChroPath 给了我这些选项:

相对 XPath://td[2]//a[1]

绝对 Xpath:/html[1]/body[1]/table[1]/tbody[1]/tr[1]/td[2]/a[1]

CSS 选择器:table:nth-child(5) tbody:nth-child(1) tr:nth-child(1) td:nth-child(2) &gt; a:nth-child(1)

在使用 driver.find 选项时,这些都没有真正起作用

当我尝试只执行 javascript driver.execute_script("javascript:submitJudgementSearch();") 时出现错误:“selenium.common.exceptions.JavascriptException: Message: javascript error: submitJudgementSearch is not defined”。

关于其他选择它的方法有什么想法吗?还是我看错了什么?路上的这个颠簸真的让我难过。谢谢!

【问题讨论】:

    标签: javascript python selenium selenium-webdriver


    【解决方案1】:

    使用Attribute Starts With Selector 怎么样?

    由于您的锚点似乎具有唯一的 href 值,这可以作为锚点本身的选择器。如果 &lt;td&gt; 确实是您所需要的,您可以从那里将 dom 向上移动到父级。

    $('a[href^="http://example.com/external/link"]').click(function() {});
    

    【讨论】:

    • 我不太确定从哪里开始。我玩了一下代码,给我的错误最少的是:driver.execute_script("$('a[href^=\"javascript:submitJudgementSearch();\"]');") 错误:selenium.common.exceptions.JavascriptException: Message: javascript error: $ is not defined跨度>
    【解决方案2】:

    您可以使用document.querySelector 来完成这项工作,请参阅下面的sn-p。我可以使用 document.querySelector

    选择该元素

    document.querySelector('td a b').style.color = "red";
    <table border="0" bgcolor="#ededed" cellpadding="8" cellspacing="0">
      <tbody>
        <tr>
          <td width="33%" bgcolor="#ededed" nowrap=""><b><font size="+1"><u>Case Search</u></font></b></td>
          <td width="33%" bgcolor="#cccccc" nowrap=""><a href="javascript:submitJudgementSearch();" target="_self"><b><font size="+1">Judgment/Lien Search</font></b></a></td>
          <td width="33%" bgcolor="#cccccc" nowrap="">
            <a href="javascript:submitPropertySearch();" target="_self">
              <font size="+1"><b>Property/Lis Pendens Search</b></font>
            </a>
          </td>
        </tr>
      </tbody>

    还有一个例子here

    还有Mozilla docs

    【讨论】:

    • 文档应该设置成什么?有了这个,我想我会收到一个错误,因为“文档”尚未定义。
    • 由于 javascript 文档是页面本身的默认标识符,我对 Selenium 没有太多经验,但根据 webpage 判断,您应该可以使用 document.querySelector 作为该页面上提供的示例之一就是这样做的。抱歉,如果这不起作用,我的大部分经验都是使用 javascript,但根据我对这个问题的研究,这个解决方案应该可以工作。 MDN Docs document
    • 好吧,这更有意义。我试过driver.execute_script("document.querySelector('td a b').style.color = \"red\";") 导致错误selenium.common.exceptions.JavascriptException: Message: javascript error: Cannot read property 'style' of null 我在\ 中添加了因为引号内有引号。
    • 真的吗?嗯,根据我的代码笔和您提供的 html,应该在这种特定情况下工作,因为该元素在 &lt;a&gt; 之后很方便地有一个 &lt;b&gt; 元素,而您提供的 html 中没有其他任何元素具有嵌套类似的元素,并且从那里你可以选择parent elements,但如果这是null,那么我目前想不出比我提供的选择那个特定元素更好的解决方案,除非我想太多问题了。
    • 我知道真正的问题是什么。一切都在一个框架内,我不确定这会如何改变事情。我以前从未处理过框架。所以我假设我必须先进入框架,然后才能运行任何代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多