如何使用Selenium自动在输入字段中输入文本?

How to input text in input field automatically with Selenium?

提问人:Random 提问时间:11/3/2023 最后编辑:JeffCRandom 更新时间:11/4/2023 访问量:31

问:

我正在尝试使用 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 

你是我最后的希望......

python html selenium-webdriver 下拉菜单 selenium-chromedriver

评论

0赞 JeffC 11/4/2023
你能分享一个页面的链接吗?我明白你在描述什么,但如果我能自己看到这个页面,找出解决方案会容易得多。

答: 暂无答案