首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Selenium单击Kickstarter中的链接

使用Selenium单击Kickstarter中的链接
EN

Stack Overflow用户
提问于 2018-05-05 21:55:33
回答 1查看 154关注 0票数 0

我正试图仅仅根据项目名称来刮Kickstarter。使用项目名称和基本URL,我可以访问搜索页面。为了抓取项目页面,我需要使用Selenium来单击URL。但是,我不能将Selenium指向要单击的正确元素。我也希望这是动态的,所以我不需要每次都把项目名称。

代码语言:javascript
复制
<div class="type-18 clamp-5 navy-500 mb3">
    <a href="https://www.kickstarter.com/projects/1980119549/knife-block- 
    designed-by-if-and-red-dot-winner-jle? 
    ref=discovery&amp;term=Knife%20block%20- 
    %20Designed%20by%20IF%20and%20Red%20dot%20winner%20JLE%20Design" 
    class="soft-black hover-text-underline">Knife block - 
    Designed by IF and 
    Red dot winner JLE Design
    </a> 
</div>`   

driver = webdriver.Chrome(chrome_path)
url = 'https://www.kickstarter.com/discover/advanced?ref=nav_search&term=Knife 
       block - Designed by IF and Red dot winner JLE Design' 
driver.get(url)

elem = driver.find_elements_by_link_text('Knife block - Designed by IF and Red 
       dot winner JLE Design')
elem.click()

我怎样才能让elem指向正确的链接?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-06 22:08:45

关于您的尝试,您的代码有一个错误:使用find_elements....返回一个元素列表,这样.click()方法就无法工作。你是说要使用find_element

若要动态单击链接,请改用XPath。由此产生的守则将是:

代码语言:javascript
复制
elem = driver.find_element_by_xpath('//div[contains(@class, "type-18")]/a')
elem.click()

这会抢到第一场比赛。您可以执行find_elements并对元素进行迭代,但这将是一种糟糕的方法,因为您要单击链接,每次都会导致上一页失效。如果有多个,则可以使用相同的XPath,但需要索引:

代码语言:javascript
复制
first_elem = driver.find_element_by_xpath('(//div[contains(@class, "type-18")]/a)[1]')
first_elem.click()
# ...
second_elem = driver.find_element_by_xpath('(//div[contains(@class, "type-18")]/a)[2]')
second_elem.click() 
# And so forth...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50194353

复制
相关文章

相似问题

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