首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在浏览器返回后在可显示的列表中查找元素

在浏览器返回后在可显示的列表中查找元素
EN

Stack Overflow用户
提问于 2018-03-07 17:45:06
回答 1查看 21关注 0票数 0

我正在用下面的结构抓取一张网

代码语言:javascript
运行
复制
Menu1
  Submenu1
    Event1
    Event2
    ...
  Submenu2
    Event n
    ...
  ...
Menu2
  ....

要访问子菜单,您必须单击Menu,以便展开节点并使子菜单列表可见,要访问Event list,您需要单击相应的子菜单节点。一旦你得到了事件,你点击它,它就会转到另一个页面。在抓取了一些事件之后,返回到上一页并抓取下一个事件。代码将如下所示

代码语言:javascript
运行
复制
browser=webdriver.Chrome()
browser.get(url)

Menu1=browser.find_element_by_xpath('some expression')
Menu1.click()

submenu=Menu1.find_elements_by_xpath('some other expression')
for sub in submenu:
   event=sub.find_elements_by_xpath('expression here')
   for ev in event:
     event.click()
     Some scraping
     'Go back to previous page'
     browser.execute_script("window.history.go(-1)")

在第一次迭代之后,当我尝试为Event2做第二次迭代时,我得到了一个NoSuchElementException,这主要是因为在返回之后,列表没有展开,因此并不是所有的对象都是可见的,以便继续执行for循环。

有什么适合代码的方法来修复这个问题吗?我的猜测是,如果我再次单击Menu1,所有子菜单元素都将可见,因此列表将再次可用。之后,如果我单击sub,事件列表也将可用。

渴望阅读您的建议,谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-03-08 22:25:51

因此,实际上,我想到的解决方案是为每个菜单生成几个列表,其中包含节点的文本。在for循环中迭代,而不是在节点中迭代,循环的节点名称是不变的。然后,对于每个节点名称,循环遍历对象直到找到它,然后单击该特定项目。

然后重复上述步骤,直到到达所有节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49148688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档