【发布时间】:2015-06-21 13:16:09
【问题描述】:
我在 Python 2.7 中使用 selenium。从网页上的搜索框中检索内容。搜索框会动态检索并在框中显示结果。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
import re
from time import sleep
driver = webdriver.Firefox()
driver.get(url)
df = pd.read_csv("read.csv")
def crawl(isin):
searchkey = driver.find_element_by_name("searchkey")
searchkey.clear()
searchkey.send_keys(isin)
sleep(11)
search_result = driver.find_element_by_class_name("ac_results")
names = re.match(r"^.*(?=(\())", search_result.text).group().encode("utf-8")
product_id = re.findall(r"((?<=\()[0-9]*)", search_result.text)
return pd.Series([product_id, names])
df[["insref", "name"]] = df["ISIN"].apply(crawl)
print df
相关部分代码可以在def crawl(isin):下找到
- 程序在搜索框中输入要搜索的内容(该框被错误地命名为
searchkey)。 - 然后它执行
sleep()并等待内容显示在搜索框下拉字段ac_results中。 - 然后使用 Regex 获取两个变量
insrefs和names。
我希望它等待 WebElement ac_results 中的内容加载,而不是调用 sleep()。
由于它会不断地使用搜索框通过从列表中输入新的搜索词来获取新数据,因此可以使用 Regex 来识别ac_results 中何时有与先前内容不同的新内容。
有办法吗?需要注意的是,搜索框中的内容是动态加载的,因此该函数必须识别出 WebElement 中的某些内容发生了变化。
【问题讨论】:
标签: python selenium selenium-webdriver