如何在 Selenium 中导航到新网页? [英] How to Navigate to a New Webpage In Selenium?

查看:52
本文介绍了如何在 Selenium 中导航到新网页?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

driver.get(<一些网址>)对于 driver.find_elements_by_class_name('thumbnail') 中的元素:element.find_element_by_xpath(".//a").click() #this有效并导航到新页面element.find_element_by_link_text('点击这里').click() #this 没有

需要通过单击缩略图来导航以下 HTML(当然是简化的),该缩略图指向一个新页面,然后需要单击该新页面中的 Click here 链接:

<html lang="en-US" prefix="og: http://iuytp.me/ns# fb: http://iuytp.me/ns/fb#"><头><meta charset="UTF-8"/><title>发布</title><body class="archive category category-releases category-4 custom-background"><div id="main"><div id="container" class="one-column"><div id="content" role="main"><h1 class="page-title">发布</h1><div id="thumbnail-post-display"><div id="thumbnail-post" class="post-7158 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-designer category-releases category-uncategorized"><div class="thumbnail"><a href="http://records.net/uncategorized/designer-7-inch-bufu-records-co-release/" title="设计师的永久链接&#8211; 7 英寸"rel="书签"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/05/dboypledge32-300x300.png" class="attachment-thumbnail wp-post-image" alt="dboypledge3"/></a></div><h2><a href="http://records.net/uncategorized/designer-7-inch-bufu-records-co-release/" title="Designer &#8211; 7 英寸的永久链接"rel="书签">设计师 &#8211;7英寸/a/h2

</div><!--结束缩略图帖子显示--><div id="thumbnail-post-display"><div id="thumbnail-post" class="post-7107 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases"><div class="thumbnail"><a href="http://records.net/releases/people-2014-tour-demos/" title="All My People &#8211; 2014 的永久链接Tour Demos" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/04/01_Doubt-mp3-image-300x300.png" class="attachment-thumbnail wp-post-image" alt=""/></a></div><h2><a href="http://records.net/releases/people-2014-tour-demos/" title="All My People &#8211; 2014 巡回演示的永久链接" rel="书签">我所有的人&#8211;2014 年巡回演示</a></h2>

</div><!--结束缩略图帖子显示--><div id="thumbnail-post-display"><div id="thumbnail-post" class="post-7089 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases"><div class="thumbnail"><a href="http://records.net/releases/sirens-blossom-talk/" title="Syrins &#8211; Boss Talk 的永久链接" rel="书签"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/04/sirens_final_smaller-300x300.jpg" class="附件缩略图 wp-post-image" alt="sirens_final_smaller"/></a></div><h2><a href="http://records.net/releases/sirens-blossom-talk/" title="Syrins &#8211; Boss Talk 的永久链接" rel="bookmark">Syrins&#8211;老板谈话

</div><!--结束缩略图帖子显示--><div id="thumbnail-post-display"><div id="thumbnail-post" class="post-7073 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases"><div class="thumbnail"><a href="http://records.net/releases/worlds-strongest-man-scares/" title="世界硬汉&#8217;的永久链接;#8211; 抱歉吓到你了" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/03/a2312749950_10-300x300.jpg" class="attachment-thumbnail wp-post-image" alt="a2312749950_10"/></a></div><h2><a href="http://records.net/releases/worlds-strongest-man-scares/" title="World&#8217;s Tough Man &#8211; sorry Scares 的永久链接You" rel="bookmark">World&#8217;s Tough Man &#8211;抱歉吓到你了</a></h2>

</div><!--结束缩略图帖子显示--><div id="thumbnail-post-display"><div id="thumbnail-post" class="post-7046 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases"><div class="thumbnail"><a href="http://records.net/releases/sundog-space-criminal/" title="Dog &#8211; 太空罪犯的永久链接" rel="书签"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/03/Sundog_cover_high_res-300x300.jpg" class="附件缩略图 wp-post-image" alt="dog_cover_high_res"/></a></div><h2><a href="http://records.net/releases/sundog-space-criminal/" title="Dog &#8211; 太空罪犯的永久链接" rel="bookmark">Dog&#8211;太空罪犯</a></h2>

</div><!--结束缩略图帖子显示--><div style="clear:both"></div></div><!-- #container --></div><!-- #main --></div><!-- #wrapper --></div><!--#bg-wrapper--></html>

然而,我的代码吐出了以下错误:

回溯(最近一次调用最后一次):...文件crawler.py",第 17 行,在主目录中driver.find_element_by_link_text('点击这里').click()文件/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py",第 254 行,在 find_element_by_link_text 中返回 self.find_element(by=By.LINK_TEXT, value=link_text)文件/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py",第 662 行,在 find_element 中{'using': by, 'value': value})['value']文件/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py",第173行,在执行中self.error_handler.check_response(响应)文件/Library/Python/2.7/site-packages/selenium/webdriver/remote/errorhandler.py",第 164 行,在 check_response 中引发异常类(消息,屏幕,堆栈跟踪)selenium.common.exceptions.NoSuchElementException:消息:你没有这样的元素\n(会话信息:chrome=35.0.1916.153)\n(驱动程序信息:chromedriver=2.10.267517,平台=Mac OS X 10.9.3 x86_64)'

问题似乎是该元素没有使用新页面的内容进行更新.用 driver 替换有问题的行的 element 也不起作用.我做错了什么?

请注意,我必须能够对所有缩略图执行此操作(因此是 for 循环).

解决方案

事实证明,您需要提前存储要导航到的链接.这就是最终对我有用的东西(找到 此主题 很有帮助):

driver.get(<一些网址>)elements = driver.find_elements_by_xpath("//h2/a")链接 = []对于范围内的我(len(元素)):links.append(elements[i].get_attribute('href'))对于链接中的链接:打印导航到:"+链接driver.get(链接)# 在此页面内执行操作...driver.back()

I have the following code:

driver.get(<some url>)
for element in driver.find_elements_by_class_name('thumbnail'):
    element.find_element_by_xpath(".//a").click() #this works and navigates to new page
    element.find_element_by_link_text('Click here').click() #this doesn't

Which needs to navigate the following HTML (simplified of course) by clicking on a thumbnail, which directs to a new page, and then needs to click the Click here link in that new page:

<!DOCTYPE html>
<html lang="en-US" prefix="og: http://iuytp.me/ns# fb: http://iuytp.me/ns/fb#">
<head>
<meta charset="UTF-8" />
<title>Releases</title>
</head>

<body class="archive category category-releases category-4 custom-background">
    <div id="main">
        <div id="container" class="one-column">
            <div id="content" role="main">

                <h1 class="page-title">Releases</h1>

            <div id="thumbnail-post-display">
        <div id="thumbnail-post" class="post-7158 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-designer category-releases category-uncategorized">
            <div class="thumbnail"><a href="http://records.net/uncategorized/designer-7-inch-bufu-records-co-release/" title="Permanent link to Designer &#8211; 7 inch" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/05/dboypledge32-300x300.png" class="attachment-thumbnail wp-post-image" alt="dboypledge3" /></a></div>
            <h2><a href="http://records.net/uncategorized/designer-7-inch-bufu-records-co-release/" title="Permanent link to Designer &#8211; 7 inch" rel="bookmark">Designer &#8211; 7 inch</a></h2>
        </div>
    </div><!--end thumbnail post display-->

            <div id="thumbnail-post-display">
        <div id="thumbnail-post" class="post-7107 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases">
            <div class="thumbnail"><a href="http://records.net/releases/people-2014-tour-demos/" title="Permanent link to All My People &#8211; 2014 Tour Demos" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/04/01_Doubt-mp3-image-300x300.png" class="attachment-thumbnail wp-post-image" alt="" /></a></div>
            <h2><a href="http://records.net/releases/people-2014-tour-demos/" title="Permanent link to All My People &#8211; 2014 Tour Demos" rel="bookmark">All My People &#8211; 2014 Tour Demos</a></h2>
        </div>
    </div><!--end thumbnail post display-->

            <div id="thumbnail-post-display">
        <div id="thumbnail-post" class="post-7089 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases">
            <div class="thumbnail"><a href="http://records.net/releases/sirens-blossom-talk/" title="Permanent link to Syrins &#8211; Boss Talk" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/04/sirens_final_smaller-300x300.jpg" class="attachment-thumbnail wp-post-image" alt="sirens_final_smaller" /></a></div>
            <h2><a href="http://records.net/releases/sirens-blossom-talk/" title="Permanent link to Syrins &#8211; Boss Talk" rel="bookmark">Syrins &#8211; Boss Talk</a></h2>
        </div>
    </div><!--end thumbnail post display-->

            <div id="thumbnail-post-display">
        <div id="thumbnail-post" class="post-7073 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases">
            <div class="thumbnail"><a href="http://records.net/releases/worlds-strongest-man-scares/" title="Permanent link to World&#8217;s Tough Man &#8211; Sorry Scares You" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/03/a2312749950_10-300x300.jpg" class="attachment-thumbnail wp-post-image" alt="a2312749950_10" /></a></div>
            <h2><a href="http://records.net/releases/worlds-strongest-man-scares/" title="Permanent link to World&#8217;s Tough Man &#8211; Sorry Scares You" rel="bookmark">World&#8217;s Tough Man &#8211; Sorry Scares You</a></h2>
        </div>
    </div><!--end thumbnail post display-->

            <div id="thumbnail-post-display">
        <div id="thumbnail-post" class="post-7046 post type-post status-publish format-standard has-post-thumbnail hentry category-blog category-releases">
            <div class="thumbnail"><a href="http://records.net/releases/sundog-space-criminal/" title="Permanent link to Dog &#8211; Space Criminal" rel="bookmark"><img width="300" height="300" src="http://records.net/dev/wp-content/uploads/2014/03/Sundog_cover_high_res-300x300.jpg" class="attachment-thumbnail wp-post-image" alt="dog_cover_high_res" /></a></div>
            <h2><a href="http://records.net/releases/sundog-space-criminal/" title="Permanent link to Dog &#8211; Space Criminal" rel="bookmark">Dog &#8211; Space Criminal</a></h2>
        </div>
    </div><!--end thumbnail post display-->

<div style="clear:both"></div>


        </div><!-- #container -->

    </div><!-- #main -->
</div><!-- #wrapper -->

</div><!--#bg-wrapper-->

</body>
</html>

My code however spits out the following error:

Traceback (most recent call last):
  ...
  File "crawler.py", line 17, in main
    driver.find_element_by_link_text('Click here').click()
  File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 254, in find_element_by_link_text
    return self.find_element(by=By.LINK_TEXT, value=link_text)
  File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 662, in find_element
    {'using': by, 'value': value})['value']
  File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 173, in execute
    self.error_handler.check_response(response)
  File "/Library/Python/2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 164, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: u'no such element\n  (Session info: chrome=35.0.1916.153)\n  (Driver info: chromedriver=2.10.267517,platform=Mac OS X 10.9.3 x86_64)' 

The problem appears to be that the element isn't being updated with the contents of the new page. Replacing the problematic line's element with driver doesn't work either. What am I doing wrong?

Please note that I must be able to do this for all thumbnails (hence the for loop).

解决方案

Turns out you need to store the links you want to navigate to in advance. This is what ended up working for me (found this thread to be helpful):

driver.get(<some url>)
elements = driver.find_elements_by_xpath("//h2/a")

links = []
for i in range(len(elements)):
    links.append(elements[i].get_attribute('href'))

for link in links:
    print 'navigating to: ' + link
    driver.get(link)

    # do stuff within that page here...

    driver.back()

这篇关于如何在 Selenium 中导航到新网页?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆