作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对 Python 和 Selenium 还很陌生,但已经开始学习了。我一直在谷歌搜索如何解决这个编码问题,但找不到确切的解决方案。
我想要完成的是单击页面上的所有用户名链接,单击我转到的页面上的关注按钮,然后返回原始页面并对其余用户名执行相同操作链接。
基本上,我想创建一个执行此操作的循环:
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()
程序完成,屏幕上没有任何反应。也没有错误信息。
我必须更改什么才能单击初始页面上的每个链接并单击链接将我转到的页面上的按钮?
这是指向类似问题的链接。 Loop through links using Selenium Webdriver (Python)
非常感谢您的帮助。
最佳答案
已经很长时间了,但只是发布答案,如果有人还在检查相同类型的问题。
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 创建循环以单击页面上的链接并在每个新页面上按下按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361432/
我是一名优秀的程序员,十分优秀!