我正在尝试自动填写表单。我用Selenium录制了一个脚本。
要填充的字段之一是邮政编码。当我开始输入代码时,会打开一个新窗口以建议适当的选项(javascript自动填充)
我需要选择第一项ul(参见下面的html)
我对Selenium很新,虽然我一直在阅读Selenium / html文档,但我已经完全停留了近一个月......
非常感谢您的支持
我的代码如下,我收到错误消息" 元素无法通过键盘访问"
elem = driver.find_element_by_id("location_p")
elem.send_keys("75")
first_option = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.CLASS_NAME, "selected")))
first_option.send_keys(Keys.RETURN)
**HTML**
<div id="localisation_left">
<div class="line toDisable">
<label for="location_p" class="label">Ville ou code postal *</label>
<div class="field-wrapper location-container">
<div class="inputWrapper">
<i id="browserGeoloc" class="icon-geoloc icon-2x blue"></i>
<div class="loaderGif-small hidden"></div>
<input class="nude" name="location_p" id="location_p" autocomplete="off" value="Paris 75010" type="text">
<input name="zipcode" value="" type="hidden">
<input name="city" value="" type="hidden">
<script type="text/javascript">
var numberOfLocation = 1, numberOfAuthorizedLocation = 1;
var cityNewadMultipleLocation = new MultipleLocationNewad('input[name="location_p"]', numberOfLocation, numberOfAuthorizedLocation);
cityNewadMultipleLocation.cityAndZipcodeAreSelected = true;
</script>
<input name="region" value="" type="hidden">
<input name="dpt_code" value="" type="hidden">
</div>
<ul class="location-list visible" style="top: 43px;">
<li data-region="12" data-dpt-code="75" class="selected">
<span class="city" title="Paris">Paris</span> <span class="zipcode">75011</span>
</li>
<li data-region="12" data-dpt-code="75">
<span class="city" title="Paris">Paris</span> <span class="zipcode">75015</span>
</li>
<li data-region="12" data-dpt-code="75">
<span class="city" title="Paris">Paris</span> <span class="zipcode">75009</span>
</li>
<li data-region="12" data-dpt-code="75">
<span class="city" title="Paris">Paris</span> <span class="zipcode">75010</span>
</li>
<li data-region="12" data-dpt-code="75">
<span class="city" title="Paris">Paris</span> <span class="zipcode">75017</span>
</li>
&#13;
答案 0 :(得分:2)
我遇到了类似的问题,上述解决方案对我来说不起作用(它将引发无效的语法错误)。
我首先使用find_element_by_css_selector
函数,该函数选择具有给定属性的元素的第一次出现。这不起作用。
然后我使用find_elements_by_css_selector
(注意s),它返回具有给定属性的元素的列表。该列表中有两个元素。当然,第一个键(索引为[0])无法通过键盘访问:这等效于上面的(1)。但是第二个元素(索引为[1])可以通过键盘访问。
问题解决了。
答案 1 :(得分:1)
尝试使用下面的Xpath进行选择
<div class="body">
<span>
Align the
<span class="inline-block text" style="
vertical-align: text-top;">top of this</span> with text-top
</span>
</div>
<div class="body">
<span>
Align the
<span class="inline-block text" style="
vertical-align: top;">top of this</span> with top
</span>
</div>
<div class="body">
<span>
align the
<span class="inline-block text" style="
vertical-align: text-bottom;">bottom of this</span> with text-bottom
</span>
</div>
<div class="body">
<span>
align the
<span class="inline-block text" style="
vertical-align: bottom;">bottom of this</span> with bottom
</span>
</div>
答案 2 :(得分:1)
您可以在第一个选项上click
,而不是按Enter
键
elem = driver.find_element_by_id("location_p")
elem.send_keys("75")
condition = EC.visibility_of_element_located((By.CSS,
"label[for='location_p'] + div ul.location-list > li"))
first_option = WebDriverWait(driver, 15).until(condition)
first_option.click()
答案 3 :(得分:0)
如果任何人都面临无法通过键盘问题到达Element的问题,也可以寻求以下方法:
input_xpath = '//input[@type="file"][@name="files[]"][@class="class_name"]'
input_element = self.driver.find_element_by_xpath(input_xpath)
## to make element visible:
driver.execute_script('arguments[0].style = ""; arguments[0].style.display = "block"; arguments[0].style.visibility = "visible";',
input_element)
input_element.send_keys('~\Desktop\Release2.pdf')