概述
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创建循环以单击页面上的链接,然后在每个新页面上按按钮...所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复