【发布时间】:2018-04-28 09:30:34
【问题描述】:
我在 python 中结合 selenium 编写了一个脚本,以从网页循环单击几个链接。首先,爬虫应该点击登录页面上的搜索按钮(不更改搜索字段中的任何内容)以填充结果。
第一步:
当结果显示时,抓取工具应该点击我尝试在第一张图片中显示的每个链接。 单击任何链接后,会弹出一个包含更多信息的框。
第二步:
在弹出框中,有几个选项卡隐藏了更多信息,这些信息在单击时会显示出来(新选项卡在图 3 中可见)。
最后:
但是,抓取工具会继续执行相同的操作,直到所有链接都用尽为止。
我尝试过的几乎可以完成所有事情。它执行上述所有步骤一次(对于第一个链接),但对于第二个链接,刮板卡在我的脚本的最后一行抛出 timeout exception 错误。任何帮助使它成功的人都将受到高度赞赏。
网址:site link
这是我迄今为止尝试过的:
from selenium import webdriver ; import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://www.mspa-ea.org/search-mspa-companies.html")
wait.until(EC.element_to_be_clickable((By.ID, "element-button"))).click() #clicking on search button
for post in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".company a"))):
post.click() #clicking on each links shown in image one
time.sleep(2)
try:
for elem in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".memberDetail .informationContainer ul li"))):
elem.click() #clicking on tabs cyclically
time.sleep(2)
except:
pass
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".memberDetail .closeDetail"))).click()
#close the pop up box.
#timeout exception throws here when it cycles for the second time
但是,在对单个链接执行所有这些操作后,当另一个链接重复该操作时,它会打开弹出框,而不是单击选项卡,而是直接点击最后一行并抛出 timeout exception。此外,我无法摆脱在我的爬虫中定义的硬编码延迟。
图片如下(一二三依次):
https://i.stack.imgur.com/RLvVY.jpg
【问题讨论】:
标签: python python-3.x selenium web-scraping selenium-chromedriver