Python Selenium创建循环以单击页面上的链接并按下每个新页面上的按钮

Gus*_*bel 5 python selenium loops click hyperlink

我对Python和Selenium很新,但是开始接受它.我一直在谷歌搜索如何解决这个编码问题,但无法找到确切的解决方案.

我想要完成的是单击页面上的所有用户名链接,单击我所访问的页面上的关注按钮,然后返回到原始页面并对其余的用户名链接执行相同操作.

基本上,我想创建一个执行此操作的循环:

  1. 单击第一个用户名
    • 点击关注按钮
    • 返回上一个页面
  2. 单击第二个用户名
    • 点击关注按钮
    • 返回上一个页面

ETC .....通过每个链接

这是我目前的代码和迄今为止我尝试过的内容:

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()
Run Code Online (Sandbox Code Playgroud)

程序完成,屏幕上没有任何反应.也没有错误消息.

单击初始页面上的每个链接并单击链接带我到的页面上的按钮,我必须更改哪些内容?

这是类似问题的链接. 使用Selenium Webdriver(Python)循环链接

非常感谢您的帮助.

sup*_*uri 6

已经很长时间了,但只是发布答案,如果有人仍在某些时候检查同类问题。

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()
Run Code Online (Sandbox Code Playgroud)