I am using Python selenium to automate my attendance entry. It was working fine, now I wanted to try by modifying the source code. I have seen few posts stating that it can be m
The problem is that execute_script
executes JavaScript inside the browser [1], which knows nothing about python variables in python script. In particuar input_list
is not defined for JavaScript, since it's a python variable.
To fix this, you can select the element inside the JavaScript file. To do this, you can set your cmd to something like this [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?
Try following solution and let me know if any issues occurs:
driver.execute_script("""document.querySelector("select[name='date1'] option").value="2016-09-07";""")
P.S. I advise you not to use absolute XPath
in your selectors, but relative instead
in python use this :
element = driver.find_element_by_id("some-random-number")
driver.execute_script("arguments[0].innerText = 'change text'", element)