2016-09-17 94 views
2

我正在使用Python硒自动化我的出席记录。它工作正常,现在我想通过修改源代码来尝试。我看过几篇文章,指出它可以使用driver.execute_script()修改,它适用于JavaScript,但在我的情况下,我需要修改select标记下的源代码。我能够使用inspect element修改源代码。以下是select标签的源代码:Python硒 - 修改网页的源代码

<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: Message: input_list is not defined

我能够使用inspect element窗口修改源代码。有什么方法可以使用硒修改源代码?

回答

0

尝试以下解决方案,让我知道是否有任何问题发生:

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

P.S.我建议你不要在你的选择器中使用绝对的XPath,而是相对的而不是

+0

非常感谢。有效。代码中有一个小错误,我编辑它。 – Jeril

2

问题是,execute_script在浏览器内部执行JavaScript [1],它对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?

+0

非常感谢,但由Anderson建议的脚本没有任何额外的JavaScript工作。 – Jeril