我试图抓住一个房地产网站上市。它有一个aspx表单,必须在提交之前填写。
http://www.cbre.us/PropertyListings/Pages/Properties-for-Sale.aspx
然而,我所关心的只是俄勒冈州的多户住宅物业。所以这是我的第一次尝试:
driver = webdriver.Firefox()
driver.get("http://www.cbre.us/PropertyListings/Pages/Properties-for-Sale.aspx")
#Searching for multifamily residences
selectPropertyType = driver.find_element_by_id("ForSalePropertyType")
selectPropertyType.select_by_value("70")
#In the state of Oregon
selectState = driver.find_element_by_id("ForSaleState_ListBox1")
selectState.select_by_value("OR")
#Submit form
submitBtn = driver.find_element_by_id("ForSaleLooplinkSubmit")
submitBtn.click()
#Wait for results to load
WebDriverWait(driver, 5)
当我运行此脚本时,它会出现错误"无法定位元素" ForSalePropertyType"。我在这做错了什么?提前谢谢。
答案 0 :(得分:5)
此元素位于iframe
内。您必须切换到它的上下文:
driver.switch_to.frame("ctl00_PlaceHolderMain_IFrameContent_IFrameContent")
# searching for multifamily residences
selectPropertyType = driver.find_element_by_id("ForSalePropertyType")
selectPropertyType.select_by_value("70")
返回默认上下文:
driver.switch_to.default_content()
作为旁注,请注意Disclaimer / Terms of use中列出的政策,具体为:
您同意不会 :( a)冒充任何人或实体或 歪曲您与任何其他人或实体的关系;的(b)中 从事垃圾邮件,洪水,收集电子邮件地址或其他 个人信息,蜘蛛网,屏幕抓取,数据库抓取, 或任何其他活动,目的是获取用户名单或 任何其他信息,包括具体的财产清单 通过网站提供; (c)发送连锁信或金字塔计划 通过网站;或(d)试图未经授权访问其他人 通过网站的计算机系统。您同意不会使用 网站以任何可能损坏,禁用,过载或损害的方式 该网站或干扰任何其他方的使用和享受 站点。