我是靠谱客的博主 冷酷保温杯,最近开发中收集的这篇文章主要介绍python selenium 点击链接,Python Selenium创建循环以单击页面上的链接,然后在每个新页面上按按钮...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

I'm fairly new to Python and Selenium, but starting to pick it up. I've been googling how to solve this coding issue, but can't find the exact solution.

What I'm trying to accomplish is click all of the username links on a page, click the follow button on the page that I'm taken to, then return to the original page and do the same for rest of the username links.

Basically, I want to create a loop that does this:

click on the first username

click on the follow button

go back to the previous page

click on the second username

click on the follow button

go back to the previous page

ETC..... through each link

Here is my current code and what I've tried so far:

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()

browser.get('thewebpage')

search = browser.find_element_by_id('getSearch')

search.click()

search.send_keys('searchitem' + Keys.RETURN)

searchitem = browser.find_elements_by_class_name("name")[0]

searchitem.click()

#I am now on the page where it shows the users

#this is where I'm getting stuck

#here's the first code I tried

links = browser.find_elements_by_link_text("#/user/")

for link in links:

link.click()

follow = browser.find_element_by_class_name("followAction")

browser.back()

#here's the second code I tried

import selenium.webdriver.support.ui as UI

def test(self):

driver = self.driver

wait = UI.WebDriverWait(driver, 5000)

links = driver.find_elements_by_link_text("#/user/")

for link in links:

link.click()

follow = driver.find_element_by_class_name("followAction")

follow.click()

driver.implicityly_wait(5)

driver.back()

The program completes and nothing happens on the screen. No error message either.

What must I change to click each link on the initial page and click a button on the pages that the links take me to?

Your help is greatly appreciated.

解决方案

It's been long time but just posting the answer, if someone still checking for the same kind issue some point.

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.common.keys import Keys

# need the below imports to work with Explicit wait

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

browser = webdriver.Firefox()

browser.get('thewebpage')

search = browser.find_element_by_id('getSearch')

search.click()

search.send_keys('searchitem' + Keys.RETURN)

searchitem = browser.find_elements_by_class_name("name")[0]

searchitem.click()

# Here is the logic that we have to update

# Get number of users rather than the users.

userElems = len(browser.find_elements_by_link_text("#/user/"))

# iterate through each user by using the index

# if you try to use the find_elements as shown in OP, you will get StaleElement Exception

# because the user elements references will be refreshed when navigated to next page and

# load back (so we have to find the elements based on index on the page every time)

for userNum in range(1,userElems):

# this below explicit wait will make sure the script will wait max 30 sec for the next user to be clicked

user = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,"(#/user/)[" + str(userNum) + "]")))

# scroll user into view

user.location_once_scrolled_into_view

# click on user

user.click()

# click on follow link

follow = WebDriverWait(driver,30).until(EC.presence_of_element_located((By.XPATH,"followAction")))

follow.click()

# click on browser back button

browser.back()

最后

以上就是冷酷保温杯为你收集整理的python selenium 点击链接,Python Selenium创建循环以单击页面上的链接,然后在每个新页面上按按钮...的全部内容,希望文章能够帮你解决python selenium 点击链接,Python Selenium创建循环以单击页面上的链接,然后在每个新页面上按按钮...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部