我正在尝试完成 Udemy 课程“100 Days of Code: The Complete Python Pro Bootcamp”中的项目“Tinder swiping bot”。然而,登录 Tinder 网站后,我无法执行更多操作。元素的 XPath 是否可能随着每张新图片的显示而改变?我尝试使用 CSS 选择器和类来查看是否可以选择“赞”按钮,但还没有成功。
这是我的代码:
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
#Entering the website
website_url = "https://tinder.com/"
driver = webdriver.Chrome()
driver.get(website_url)
# use delay function to get all tags
driver.implicitly_wait(20)
# Clicking on sign in button
tinder_login_button = driver.find_element(By.XPATH, '//*[@id="q1434999767"]/div/div[1]/div/main/div[1]/div/div/div/div/header/div/div[2]/div[2]/a/div[2]/div[2]') #'//*[@id="c1606223767"]/div/div[1]/div/main/div[1]/div/div/div/div/header/div/div[2]/div[2]/a/div[2]/div[2]')
tinder_login_button.click()
sleep(4)
.
.
#login into tinder website using facebook
.
.
#click I accept cookies button
iaccept_button = driver.find_element(By.XPATH, '//*[@id="q1434999767"]/div/div[2]/div/div/div[1]/div[1]/button') #'//*[@id="c1606223767"]/div/div[2]/div/div/div[1]/div[1]/button/div[2]/div[2]')
iaccept_button.click()
sleep(5)
#like button
for n in range(100):
sleep(5)
try:
like_button = driver.find_element(By.XPATH, '//*[@id="q1434999767"]/div/div[1]/div/main/div[1]/div/div/div[1]/div[1]/div/div[4]/div/div[4]/button')
like_button.click()
except NoSuchElementException:
sleep(5)
我尝试使用 CSS 选择器和 ID 来查看是否可以选择“点赞”按钮,我发现每次打开网站时这些元素都会发生变化,元素的 XPath 是否可能会随着显示的每张新图片而变化?
我可以看到您正在使用 XPATH id。据我所知,大多数网站都尝试使用动态 ID 来减少机器人。我建议使用 By.CSS_SELECTOR。你可以有这样的东西:
driver.find_element(By.CSS_SELECTOR, value="tagname[attribname='value']"
我也推荐这条线
iaccept_button = driver.find_element(By.XPATH, '//[@id="q1434999767"]/div/div[2]/div/div/div[1]/div[1]/button') #' //[@id="c1606223767"]/div/div[2]/div/div/div[1]/div[1]/button/div[2]/div[2]')" iaccept_button.click()
你可以去掉变量名并在最后调用 .click()
driver.find_element(By.XPATH, '//[@id="q1434999767"]/div/div[2]/div/div/div[1]/div[1]/button') #'// [@id="c1606223767"]/div/div[2]/div/div/div[1]/div[1]/button/div[2]/div[2]')".click()