Python selenium使用静态id获取ajax的值

Python selenium使用静态id获取ajax的值,python,ajax,selenium,phantomjs,Python,Ajax,Selenium,Phantomjs,我想从ajax获取选项的值。HTML代码是: <select id="j_id0:searchlayout:mainform:countryVal" name="j_id0:searchlayout:mainform:countryVal" size="1" onchange="A4J.AJAX.Submit('j_id0:searchlayout:mainform',event,{'similarityGroupingId':'j_id0:searchlayout:mainform:j_

我想从ajax获取选项的值。HTML代码是:

<select id="j_id0:searchlayout:mainform:countryVal" name="j_id0:searchlayout:mainform:countryVal" size="1" onchange="A4J.AJAX.Submit('j_id0:searchlayout:mainform',event,{'similarityGroupingId':'j_id0:searchlayout:mainform:j_id17','parameters':{'j_id0:searchlayout:mainform:j_id17':'j_id0:searchlayout:mainform:j_id17'} ,'status':'j_id0:searchlayout:mainform:statusProcess'} )" style="height:2.4em;width:65%;">   

<option value="" selected="selected">Select Country</option>
我试过了

dropdownCountry = wait.until(EC.element_to_be_clickable((By.XPATH, "//select[@id='j_id0:searchlayout:mainform:countryVal']/option")))
但它并没有列出一份清单

一个选项是使用time.sleep(),给驾驶员足够的时间加载国家/地区列表。但我知道这不是一个好的做法

如有任何建议,我们将不胜感激。
谢谢

请尝试等待,直到出现
选项
不为空
属性:

dropdownCountry = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
((By.ID, "j_id0:searchlayout:mainform:countryVal")))
dropdownCountry.click()
WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(@value='')]"))
list_of_options = [option.get_attribute('value') for option in driver.find_elements_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(@value='')]")]
此外,您可能需要等待出现与
不同的文本内容的
选项
“选择国家”

WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(text()='Select Country')]"))

尝试等待,直到出现具有非空属性的
选项

dropdownCountry = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
((By.ID, "j_id0:searchlayout:mainform:countryVal")))
dropdownCountry.click()
WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(@value='')]"))
list_of_options = [option.get_attribute('value') for option in driver.find_elements_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(@value='')]")]
此外,您可能需要等待出现与
不同的文本内容的
选项
“选择国家”

WebDriverWait(driver, 10).until(lambda driver: driver.find_element_by_xpath("//select[@id="j_id0:searchlayout:mainform:countryVal"]/option[not(text()='Select Country')]"))

我认为这是一个不错的实践或使用->我认为这是一个不错的实践或使用->谢谢,但我得到了这个错误:引发异常\u类(消息、屏幕、堆栈跟踪)selenium.common.exceptions.StaleElementReferenceException:message:{“errorMessage”:“元素在缓存中不存在”,“请求”:{“Header”:{“Accept”:“application/json”,“接受编码”:“标识”,“连接”:“关闭”,“内容长度”:“150”,“内容类型”:“应用程序/json;字符集=UTF-8”,“主机”:“127.0.0.1:45065”,“用户代理”:“Python urllib/2.7”},“httpVersion”:“1.1”,“方法”:“POST”,“POST”:“{”using\”:“xpath\”,“sessionId\:“b423c780-f2cd-11e6-8ec9-DAEC4070B7F\”,我猜这是因为在
dropdownCountry之后。单击()
整个
select
元素由
XHR
刷新。检查更新的回答否,我尝试不使用。单击()。错误是相同的。好的。让我们澄清一下…您使用我的当前代码得到了
StaleElementReferenceException
,对吗?哪一行导致了此错误?它现在可以工作了,有一个语法错误。感谢帮助谢谢,但我得到了此错误:引发异常\u类(消息、屏幕、堆栈跟踪)selenium.common.exceptions.StaleElementReferenceException:消息:{“errorMessage”:“元素在缓存中不存在”,“请求”:{“头”:{“接受”:“应用程序/json”,“接受编码”:“标识”,“连接”:“关闭”,“内容长度”:“150”,“内容类型”:“应用程序/json;字符集=UTF-8”,“主机”:“127.0.0.1:45065”,“用户代理”:“URLPHONT LIB/2.7”},“httpVersion:“1.1”,“method:“POST”,“POST:“{\”“using\”:“xpath\”,“sessionId\”:“b423c780-f2cd-11e6-8ec9-c1dae4070b7f\”,我想这是因为在
dropdownccountry.click()之后,
整个
select
元素被
XHR
刷新。检查更新的应答号,我没有尝试。click()。错误是相同的。好的。让我们澄清一下……我当前的代码中出现了
StaleElementReferenceException
,对吗?哪一行是导致此错误的原因?它现在起作用了,出现了语法错误。感谢您的帮助