【发布时间】:2017-08-22 04:32:10
【问题描述】:
我正在学习使用 selenium 进行抓取,并且正在尝试其中一个 SAP 页面。
链接是: https://help.sap.com/viewer/2e167338c1b24da9b2a94e68efd79c42/4.2.4/en-US/
我打算做的是在目录面板上显示此页面的所有叶子/最后一级 URL。不幸的是,这些链接不是 html 的,只有当我们点击左侧面板上的每个侧边按钮时,它才会展开,而且,每个按钮点击都可以有更多的嵌套按钮!我需要点击所有这些并获取基础数据。
我从识别 xpath 开始并尝试单击它们,但它给出了以下错误:
import time
driver = webdriver.Chrome("/Users/tarun/Downloads/chromedriver")
driver.get("https://help.sap.com/viewer/2e167338c1b24da9b2a94e68efd79c42/4.2.4/en-US/")
time.sleep(20) #tried this
htmlSource = driver.page_source
buttonsSidePanel = driver.find_elements_by_xpath('//*[@id="toc"]/treecontrol/div/div[*]/div[1]/div[1]')
#also tried - //*[@id="toc"]/treecontrol/div/div[*]/div[1]/div[1]/span[1]
for x in buttonsSidePanel:
x.click()
time.sleep(1)
driver.close()
错误:ElementNotVisibleException: Message: element not visible
在这方面我有几个问题(如果其中一些是天真的很抱歉) 1.)当我检查元素时,元素在 html 中可见!我无法弄清楚做错了什么?
- 另外,如果单击按钮显示更多按钮,我如何递归单击底层按钮,或者有什么方法可以一次单击所有按钮然后抓取数据?我查看了一些 stackoverflow 问题,但无法解决我的任务
3.)点击按钮后,现在我们如何抓取新生成的内容?
【问题讨论】:
-
您在哪一行得到异常?
-
@PrakashPalnati - 在 x.click() 行中,正如答案之一所建议的那样,这可能是时间问题,因为 7 次中有一次,它有效,但我仍然没有确定也不确定在哪里添加 time.sleep()
标签: python selenium web-scraping web-crawler