Selenium无法定位元素(Python)WebScraping

时间:2015-09-17 17:28:25

标签: python selenium selenium-webdriver web-scraping

我试图抓住一个房地产网站上市。它有一个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"。我在这做错了什么?提前谢谢。

1 个答案:

答案 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)试图未经授权访问其他人   通过网站的计算机系统。您同意不会使用   网站以任何可能损坏,禁用,过载或损害的方式   该网站或干扰任何其他方的使用和享受   站点。