首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用PhantomJS和Selenium浏览页面

如何使用PhantomJS和Selenium浏览页面
EN

Stack Overflow用户
提问于 2018-01-14 12:43:53
回答 3查看 128关注 0票数 0

我在网页上找到了一些DIV元素。总共有30个类似结构的DIV区块:

代码语言:javascript
复制
<div class="w-dyn-item">  
<a href="/project/soft" class="jobs-wrapper no-line w-inline-block w-clearfix">
<div class="jobs-client">
<img data-qazy="true" src="https://global.com/test.jpg" alt="Soft" class="image-9">
<div style="background-color:#cd7f32" class="job-time">Level 1</div>
</div>
<div class="jobs-content w-clearfix">
<div class="w-clearfix">
<div class="text-block-19 w-condition-invisible">PROMO</div>
<h3 class="job-title">Soft</h3>
<img height="30" data-qazy="true" src="https://global.com/test.jpg" alt="Soft" class="image-15 w-hidden-main w-hidden-medium w-hidden-small"></div>
<div class="div-block w-clearfix">
<div class="text-block-4">Italy</div>
<div class="text-block-4 w-hidden-small w-hidden-tiny">AMB</div>
<div class="text-block-4 w-hidden-small w-hidden-tiny">GTL</div>
<div class="text-block-13">January 10, 2017</div><div class="text-block-14">End date:</div></div><div class="space small"></div><p class="paragraph-3">Text text text</p></div>   
</a> 
</div>

我正在尝试访问a href并点击链接。但是,问题是我不能使用find_element_by_link_text,因为链接文本不存在。是否可以通过类a href访问class="jobs-wrapper no-line w-inline-block w-clearfix"?当我使用find_element_by_class_name时,我得到了错误Message: {"errorMessage":"Compound class names not permitted","request

代码语言:javascript
复制
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.set_window_size(1120, 550)
driver.get("https://myurl.com/")
driver.find_element_by_link_text("//a href").click()
print driver.current_url
driver.quit()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-01-14 13:01:40

您所遇到的错误是因为Selenium的find_element_by_class_name不支持多个类。

使用带有find_elements_by_css_selector的CSS选择器来代替:

代码语言:javascript
复制
driver.find_elements_by_css_selector('.jobs-wrapper.no-line.w-inline-block.w-clearfix')

将使用您想要的类选择所有标记,然后可以对它们进行迭代,并使用click()或任何其他需要的操作。

编辑

在您的评论之后,新的代码片段可以帮助您做您想做的事情:

代码语言:javascript
复制
result = {}
urls = []
# 'elements' is a the list you previously obtained using the css selector
for element in elements:
    urls.append(element.get_attribute('href'))


# Now you can iterate over all extracted hrefs:
for url in urls:
    url_data = {}
    driver.get(url)
    field1 = driver.find_element_by_id('wanted_id_1')
    url_data['field1'] = field1
    field2 = driver.find_element_by_id('wanted_id_2')
    url_data['field2'] = field2
    result[url] = url_data

现在,result是一个类似于您想要的结构的字典。

请注意,field1field2WebElement类型的,因此您可能需要首先对它们执行一些操作(提取属性、文本等)。

另外,就个人而言,看看请求BeautifulSoup,它们可能比Selenium更适合这种情况或将来类似的情况。

票数 2
EN

Stack Overflow用户

发布于 2018-01-14 13:00:54

如果您的唯一要求是单击带有a类的标记中的w-dyn-item标记,那么您可以这样做:

代码语言:javascript
复制
driver.find_element_by_class_name("w-dyn-item").find_element_by_tag_name("a").click()

若要使用w-dyn-item类->迭代所有标记,请单击它们内部的a,->返回,执行以下操作:

代码语言:javascript
复制
tags = driver.find_elements_by_class_name("w-dyn-item")
for i in range(len(tags)):
    tag = driver.find_elements_by_class_name("w-dyn-item")[i]
    tag.find_element_by_tag_name("a").click()
    # Do what you want inside the page...
    driver.back()

当然,这里的关键是在完成内部页面之后返回到根页面。

票数 2
EN

Stack Overflow用户

发布于 2018-01-14 13:33:54

要访问并单击a href,可以使用以下代码行:

代码语言:javascript
复制
driver.find_element_by_xpath("//div[@class='w-dyn-item']/a[@href='/project/soft']").click()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48249705

复制
相关文章

相似问题

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