2016-09-17 3 views
2

출석 항목을 자동화하기 위해 Python 셀렌을 사용하고 있습니다. 그것은 괜찮 았어, 지금은 소스 코드를 수정하여 시도 싶었어요. 일부 게시물은 driver.execute_script()을 사용하여 수정할 수 있으며 JavaScript에서는 작동하지만 내 경우에는 select 태그 아래에서 소스 코드를 수정해야한다는 내용을 보았습니다. inspect element을 사용하여 소스 코드를 수정할 수있었습니다.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()와 함께 할 것을 시도 : 다음은 select 태그 소스 코드입니다.

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 창을 사용하여 소스 코드를 수정할 수 있어요 다음은 내 코드이었다. Selenium을 사용하여 소스 코드를 수정할 방법이 있습니까?

답변

0

다음 시도 솔루션 문제가 발생하면 알려주세요.

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

P. 선택자에서 절대 XPath을 사용하지 말 것을 권장합니다. 대신에

+0

고마워. 그것은 효과가 있었다. 코드에 약간의 오류가 있었는데 편집했습니다. – Jeril

2

문제는 execute_script은 파이썬 스크립트의 파이썬 변수에 대해 아무것도 모르는 브라우저 [1]에서 JavaScript를 실행한다는 것입니다. 특히 input_list은 Python 변수이기 때문에 JavaScript에 정의되어 있지 않습니다.

이 문제를 해결하려면 JavaScript 파일에서 요소를 선택할 수 있습니다. 이렇게하려면, 당신은이 [2] 같은에 cmd를 설정할 수 있습니다

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

관련 문제