【问题标题】:Python selenium - modifying the source code of a webpagePython selenium - 修改网页的源代码
【发布时间】:2017-01-25 09:01:57
【问题描述】:

我正在使用 Python selenium 来自动化我的考勤输入。它工作正常,现在我想通过修改源代码来尝试。我看到很少有帖子说它可以使用driver.execute_script() 进行修改并且它适用于JavaScript,但在我的情况下,我需要修改select 标签下的源代码。我能够使用inspect element 修改源代码。以下为select标签源码:

<select name="date1">
    <option value="2016-09-17">2016-09-17</option>
    <option value="2016-09-16">2016-09-16</option>
    <option value="2016-09-14">2016-09-14</option>
</select>

我试着用driver.execute_script() 来做。以下是我的代码:

sel = driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/form/table/tbody/tr[2]/td[3]/select')
input_list = sel.find_element_by_tag_name('option')
cmd = "input_list.value = '2016-09-07'"
driver.execute_script(cmd)

但是上面的代码给了我以下错误:

selenium.common.exceptions.WebDriverException:消息:input_list 未定义

我可以使用inspect element 窗口修改源代码。有没有办法使用 selenium 修改源代码?

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    尝试以下解决方案,如果出现任何问题,请告诉我:

    driver.execute_script("""document.querySelector("select[name='date1'] option").value="2016-09-07";""")
    

    附:我建议您不要在选择器中使用绝对 XPath,而是使用相对

    【讨论】:

    • 非常感谢。有效。代码有一个小错误,我编辑了。
    【解决方案2】:

    问题是execute_script 在浏览器 [1] 中执行 JavaScript,它对 python 脚本中的 python 变量一无所知。特别是 input_list 没有为 JavaScript 定义,因为它是一个 Python 变量。

    要解决此问题,您可以选择 JavaScript 文件中的元素。为此,您可以将 cmd 设置为类似 [2]:

        function getElementByXpath(path) {
          return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
        }
    
        getElementByXpath("/html/body/div[3]/div/div[2]/form/table/tbody/tr[2]/td[3]/select/option[1]").value = '2016-09-07';
    <html>
      <body>
        <div></div>
        <div></div>
        <div>
          <div>
            <div></div>
            <div>
              <form>
                <table>
                  <tbody>
                    <tr></tr>
                    <tr>
                      <td></td>
                      <td></td>
                      <td>
                        <select name="date1">
                          <option value="2016-09-17">2016-09-17</option>
                          <option value="2016-09-16">2016-09-16</option>
                          <option value="2016-09-14">2016-09-14</option>
                        </select>
                      </td>
                    </tr>
                  </tbody>
                </table>
              </form>
            </div>
          </div>
        </div>
        

    [1]https://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.execute_script

    [2]Is there a way to get element by Xpath using JavaScript in Selenium WebDriver?

    【讨论】:

    • 非常感谢,但 Anderson 建议的脚本无需任何额外的 JavaScript 即可工作。
    【解决方案3】:

    python 中使用这个:

    element = driver.find_element_by_id("some-random-number")
    driver.execute_script("arguments[0].innerText = 'change text'", element)
    

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多