Python Selenium create loop to click through links on a page and press button on each new page

*爱你&永不变心* 提交于 2020-02-03 07:53:05

问题


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:

  1. click on the first username
    • click on the follow button
    • go back to the previous page
  2. 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?

Here's a link to a similar issue. Loop through links using Selenium Webdriver (Python)

Your help is greatly appreciated.


回答1:


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()


来源:https://stackoverflow.com/questions/31361432/python-selenium-create-loop-to-click-through-links-on-a-page-and-press-button-on

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!