它只是一个简单的抓取器,可以点击元素。它工作得很好,但我需要最后一个功能——跳过特定的html类。
脚本获取元素,然后喜欢它,然后转到下一个。这是代码:
for i in range(len(driver.find_elements_by_class_name("upvote"))):
driver.find_elements_by_class_name("upvote")[i].click()
print("Liked media.")
time.sleep(8)
这个for循环找到我想要的类"upvote",然后点击它。这是正确的,但当我已经喜欢了一些元素时,我的脚本又喜欢它了,它==不喜欢。已经喜欢的媒体有"积极投票"的类别。
这是完整的代码:
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.keys import Keys
import time
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome()
accountActive = "xxxxxx"
driver.get('https://www.example.com/User/Login?ReturnUrl=%2FProfile')
time.sleep(3)
print("Trying to login as " + accountActive)
account = driver.find_element_by_id("Email")
account.clear() #clear input
account.send_keys("xxxx")
#elem.send_keys(Keys.RETURN)
passwd = driver.find_element_by_id("Password")
passwd.clear() #clear input
passwd.send_keys("xxxx")
passwd.send_keys(Keys.RETURN)
print("Login successfull.")
time.sleep(3)
print("Getting xxxx.")
driver.get("https://www.exaple.com/Codes/")
time.sleep(3)
print("xxxx.")
driver.get("https://example.com/Codes?ordering=MostRecent&language=")
time.sleep(3)
j=0
while j<5:
for i in range(len(driver.find_elements_by_class_name("upvote"))):
driver.find_elements_by_class_name("upvote")[i].click()
print("Liked media.")
time.sleep(8)
driver.find_elements_by_tag_name("a")[93].click()
time.sleep(10)
j+=1
您可以只获取所需节点的列表并处理它们,而不是获取所有节点的列表然后忽略不需要的节点:
for element in driver.find_elements_by_xpath("//*[contains(@class, 'upvote') and not(contains(@class, 'active'))]"):
element.click()
您可以检查元素是否有active
类,如果没有click
,为此我们可以使用get_attribute((方法,它将返回一个包含元素中所有类的字符串,在您的情况下,它将类似于upvote active
:
elem = driver.find_elements_by_class_name("upvote")[i]
# Click on element only if 'active' class don't exist.
if 'active' not in elem.get_attribute('class'):
elem.click()