如何在 Python^ 中使用 Selenium 单击下拉列表的 li 元素
How to click on li element of a dropdown list using Selenium in Python^
我正在尝试 select 以下网站下拉列表中的 li 元素“US”:https://proxyscrape.com/free-proxy-list
这是 python 我有但不起作用的代码:
driver.find_element_by_xpath('/html/body/main/div/div[1]/div[3]/div/div[1]/div[2]').click()
time.sleep(4)
driver.find_element_by_css_selector("#list httpcountry countryselect [value='US']")
这是我正在使用的HTML:
<div class="nice-select selectortypes open" tabindex="0">
<span>
Country: <span class="current">all</span>
</span>
<ul class="list httpcountry countryselect">
<li data-value="all" class="option">all</li>
<li data-value="US" class="option">US</li>
<li data-value="ES" class="option">ES</li>
<li data-value="RU" class="option">RU</li>
<li data-value="PL" class="option">PL</li>
<li data-value="BD" class="option">BD</li>
<li data-value="IR" class="option">IR</li>
<li data-value="FR" class="option">FR</li>
<li data-value="CN" class="option">CN</li>
<li data-value="CA" class="option">CA</li>
<li data-value="PK" class="option">PK</li>
<li data-value="IN" class="option">IN</li>
<li data-value="ID" class="option">ID</li>
<li data-value="BR" class="option">BR</li>
<li data-value="DE" class="option">DE</li>
<li data-value="GB" class="option">GB</li>
<li data-value="TH" class="option">TH</li>
<li data-value="SG" class="option">SG</li>
<li data-value="EG" class="option">EG</li>
<li data-value="UA" class="option">UA</li>
</ul>
</div>
关于如何 select 这个元素的任何线索?
如果您查看 select US 选项时发生的情况,那么您可以看到,它将在此处更改请求中的参数:
发件人:
<a href="https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all&simplified=true" id="downloadhttp" onclick="dataLayer.push({'event' : 'GAEvent', 'eventAction' : 'downloadfpl', 'eventCategory' : 'fpl'});" download="">Download</a>
收件人:
<a href="https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=10000&country=US&ssl=all&anonymity=all&simplified=true" id="downloadhttp" onclick="dataLayer.push({'event' : 'GAEvent', 'eventAction' : 'downloadfpl', 'eventCategory' : 'fpl'});" download="">Download</a>
因此,您实际上并不想单击美国选项,但可能会发送带有适当参数的请求
解决方案:
点击国家/地区下拉列表之前需要等待,因为顶部横幅出现并且 webdriver 失去焦点,下拉列表关闭。
这是我编写的代码,脚本在这两个地方添加两个睡眠后通过了:
driver.get('https://proxyscrape.com/free-proxy-list')
country_list = driver.find_element_by_css_selector('.list.socks4country.countryselect').find_element_by_xpath('./..')
sleep(2)
country_list.click()
sleep(1)
country_list.find_element_by_css_selector('[data-value="US"]').click()
us = driver.find_element_by_css_selector('[class="list socks4country countryselect"] [data-value="US"]')
assert us.get_attribute('class') == 'option selected'
我正在尝试 select 以下网站下拉列表中的 li 元素“US”:https://proxyscrape.com/free-proxy-list
这是 python 我有但不起作用的代码:
driver.find_element_by_xpath('/html/body/main/div/div[1]/div[3]/div/div[1]/div[2]').click()
time.sleep(4)
driver.find_element_by_css_selector("#list httpcountry countryselect [value='US']")
这是我正在使用的HTML:
<div class="nice-select selectortypes open" tabindex="0">
<span>
Country: <span class="current">all</span>
</span>
<ul class="list httpcountry countryselect">
<li data-value="all" class="option">all</li>
<li data-value="US" class="option">US</li>
<li data-value="ES" class="option">ES</li>
<li data-value="RU" class="option">RU</li>
<li data-value="PL" class="option">PL</li>
<li data-value="BD" class="option">BD</li>
<li data-value="IR" class="option">IR</li>
<li data-value="FR" class="option">FR</li>
<li data-value="CN" class="option">CN</li>
<li data-value="CA" class="option">CA</li>
<li data-value="PK" class="option">PK</li>
<li data-value="IN" class="option">IN</li>
<li data-value="ID" class="option">ID</li>
<li data-value="BR" class="option">BR</li>
<li data-value="DE" class="option">DE</li>
<li data-value="GB" class="option">GB</li>
<li data-value="TH" class="option">TH</li>
<li data-value="SG" class="option">SG</li>
<li data-value="EG" class="option">EG</li>
<li data-value="UA" class="option">UA</li>
</ul>
</div>
关于如何 select 这个元素的任何线索?
如果您查看 select US 选项时发生的情况,那么您可以看到,它将在此处更改请求中的参数:
发件人:
<a href="https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=10000&country=all&ssl=all&anonymity=all&simplified=true" id="downloadhttp" onclick="dataLayer.push({'event' : 'GAEvent', 'eventAction' : 'downloadfpl', 'eventCategory' : 'fpl'});" download="">Download</a>
收件人:
<a href="https://api.proxyscrape.com/v2/?request=getproxies&protocol=http&timeout=10000&country=US&ssl=all&anonymity=all&simplified=true" id="downloadhttp" onclick="dataLayer.push({'event' : 'GAEvent', 'eventAction' : 'downloadfpl', 'eventCategory' : 'fpl'});" download="">Download</a>
因此,您实际上并不想单击美国选项,但可能会发送带有适当参数的请求
解决方案:
点击国家/地区下拉列表之前需要等待,因为顶部横幅出现并且 webdriver 失去焦点,下拉列表关闭。
这是我编写的代码,脚本在这两个地方添加两个睡眠后通过了:
driver.get('https://proxyscrape.com/free-proxy-list')
country_list = driver.find_element_by_css_selector('.list.socks4country.countryselect').find_element_by_xpath('./..')
sleep(2)
country_list.click()
sleep(1)
country_list.find_element_by_css_selector('[data-value="US"]').click()
us = driver.find_element_by_css_selector('[class="list socks4country countryselect"] [data-value="US"]')
assert us.get_attribute('class') == 'option selected'