提问人:Random 提问时间:11/3/2023 最后编辑:JeffCRandom 更新时间:11/4/2023 访问量:31
如何使用Selenium自动在输入字段中输入文本?
How to input text in input field automatically with Selenium?
问:
我正在尝试使用 Selenium 自动在 INPUT 字段中输入文本。棘手的部分是,只有当我单击该字段时,才会生成 INPUT 标签。
以下是我单击该字段后生成的 HTML:
<span class="select2-container select2-container--default select2-container--open" style="position: absolute; top: 698.2px; left: 143.788px;">
<span class="select2-dropdown select2-dropdown--below" dir="ltr" style="width: 310px; margin-top: -47px;">
<span class="select2-search select2-search--dropdown">
<input class="select2-search__field" type="search" tabindex="0" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox">
<em class="vivacom-icon icon-arrow_up input-with-select-arrow-up"></em>
</span>
<span class="select2-results">
<ul class="select2-results__options" role="tree" id="select2-senderMsisdnSelect-results" aria-expanded="true" aria-hidden="false">
<li class="select2-results__option select2-results__option--highlighted" id="select2-senderMsisdnSelect-result-exw5-876002661" role="treeitem" aria-selected="false"> 876 002661</li>
<li class="select2-results__option" id="select2-senderMsisdnSelect-result-0a0v-877749591" role="treeitem" aria-selected="false"> 877 749591</li>
<li class="select2-results__option" id="select2-senderMsisdnSelect-result-abu9-876682597" role="treeitem" aria-selected="false"> 876 682597</li>
<li class="select2-results__option" id="select2-senderMsisdnSelect-result-qim0-879314424" role="treeitem" aria-selected="false"> 879 314424</li>
</ul>
</span>
</span>
</span>
此外,这是带有下拉列表的输入,因此我可以从下拉结果中选择一些内容或在输入字段中键入内容。问题是我设法做到了这两个。
以下是展开下拉菜单的代码:
drop_down_menu_button = driver.find_element(by=By.XPATH, value='//*[@id="sendSmsMessageForm"]/div[1]/div/div[1]/div/div/div[2]/span/span[1]/span/span[2]')
drop_down_menu_button.click()
执行后,下拉列表会展开,但我没有成功单击结果中的某些内容或在字段中键入某些内容(自动)。
这是点击后生成的HTML。我认为上面的脚本对于创建 HTML 是可靠的
我尝试了不同的东西,例如:
以下方法都不起作用!
wait = WebDriverWait(driver, 50)
driver.execute_script('(function(){try{"gtm_isp_lookup",!0,"","/"}catch(a){}var c="https://extreme-ip-lookup.com/json/?key\x3dgJkinLrBaaaGv26vSxA5",b=new XMLHttpRequest;b.onreadystatechange=function(){if(4==this.readyState&&200==this.status){var a=JSON.parse(this.responseText);if("success"===a.status)try{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"isp-lookup","isp-lookup":{lat:a.lat,lon:a.lon,isp:a.isp,org:a.org,continent:a.continent,country:a.country,region:a.region,city:a.city,businessName:a.businessName, businessWebsite:a.businessWebsite}})}catch(d){}}};b.open("GET",c,!0);b.send()})();')
time.sleep(10)
input_field = wait.until(EC.presence_of_element_located((By.XPATH, '/html/body/span/span/span[1]/input')))
下面的目标是单击第一个数字,但问题是该数字的XPath在每次刷新时都会发生变化,并且无法以这种方式工作。
first_number = driver.find_element(by=By.XPATH, value='//*[@id="select2-senderMsisdnSelect-result-od25-876002661"]')
first_number.click()
以下这也不起作用:
number_input = driver.find_element(by=By.XPATH, value='/html/body/span/span/span[1]/input')
number_input.send_keys("876002661")
以下这也不起作用:
partial_text = "876002661"
options = driver.find_elements(by=By.XPATH, value='//*[@id="select2-senderMsisdnSelect-results"]/li')
for option in options:
if partial_text in option.text:
option.click()
break
你是我最后的希望......
答: 暂无答案
评论