selenium获取具有静态id的ajax的值

时间:2017-02-14 13:43:39

标签: 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_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>

    

正如您所看到的,因为在HMTL代码中可以使用id,所以使用webdriverWait(下面)无效。

dropdownCountry = WebDriverWait(driver, 10).until(EC.presence_of_element_located(
    ((By.ID, "j_id0:searchlayout:mainform:countryVal")))

我试过

dropdownCountry = wait.until(EC.element_to_be_clickable((By.XPATH, "//select[@id='j_id0:searchlayout:mainform:countryVal']/option")))

但它不会产生列表。

一个选项是使用 time.sleep(),为驱动程序提供足够的时间来加载国家/地区列表。但我知道这不是一个好习惯。

任何建议表示赞赏。 感谢

1 个答案:

答案 0 :(得分:0)

尝试等待option出现非空 value属性:

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='')]")]

此外,您可能需要等到文本内容与option不同的"Select Country"出现:

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