我试图建立一个函数来运行以下网站上的信息使用Python中的Selenium: https://www.smartystreets.com/products/single-address。给定参数中名为address_to_search的单行地址变量,该函数应该执行以下操作:
- 用Selenium加载网页url
- 将步骤2中的查找下拉菜单更改为"freeform address">
- 在步骤3的文本框中插入address_to_search
- 返回结果地址信息(目前作为文本文件是可以的)
这是不完整的函数代码:
def get_property_info(address_to_search):
url = 'https://www.smartystreets.com/products/single-address'
driver = webdriver.Chrome('chromedriver')
driver.get(url)
return driver.page_source
每当我加载url时,虽然,我没有在驱动程序的页面源中看到步骤2的dropbox,以便能够更改它或步骤3中的地址字段以插入给定的搜索。如果无法更改上述2中的下拉菜单,我可以更改输入以加载每个地址项(地址行1、地址行2、城市、州、邮政编码),尽管这种方法不太理想,但无论如何我都无法访问步骤3中的项目。
对于如何在网页上定位这些项目以及如何构建功能,您有什么建议吗?
正如我在评论中提到的,你被卡住了,因为它是一个单独的iframe。只需导航到该iframe并执行魔术。如果你的地址有"n"在像我这样的结尾,您将看到结果显示(换行字符充当回车键)。我还添加了driver参数,因为我在外部声明了它。你可以根据自己的需要修改。
address = "3301 South Greenfield Rd Gilbert, AZ 85297n"
def get_property_info(driver,address_to_search):
url = 'https://www.smartystreets.com/products/single-address-iframe'
driver.get(url)
driver.find_element_by_id("lookup-select-button").click()
driver.find_element_by_id("lookup-select").find_element_by_id("address-freeform").click()
driver.find_element_by_id("freeform-address").send_keys(address_to_search)
#return driver.page_source
get_property_info(driver,address)
有一个iframe如上所述,我也认为你应该通过硒最大化你的窗口,应该使用显式等待:-
下面是神奇的代码:-
driver = webdriver.Chrome(driver_path)
driver.maximize_window()
driver.implicitly_wait(50)
driver.get("https://www.smartystreets.com/products/single-address")
wait = WebDriverWait(driver, 20)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[title='iframe']")))
driver.execute_script("window.scrollTo(0, 500)")
ele = wait.until(EC.element_to_be_clickable((By.ID, "lookup-select")))
driver.execute_script("arguments[0].scrollIntoView(true);", ele)
ele.click()
time.sleep(5)
wait.until(EC.element_to_be_clickable((By.ID, "address-freeform"))).click()
wait.until(EC.element_to_be_clickable((By.ID, "freeform-address"))).send_keys("3503 Adonais Way, Norcross")
wait.until(EC.element_to_be_clickable((By.ID, "submit-request"))).click()
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC