python-3.x - Instagram 上的硒元素选择
问题描述
我正在尝试通过从网页中选择“心脏元素”并单击它来创建一个喜欢图像的 Instagram 机器人。
我看到元素是这样包裹的:
<div class="eo2As ">
<section class="ltpMr Slqrh">
<a class="fr66n tiVCN" href="#" role="button">
<span class="Szr5J coreSpriteHeartOpen ">Like</span></a>
并且整个页面的所有不喜欢的心脏元素的类值都是相同的。
我的代码:
from selenium import webdriver
username = "----"
password = "----" #values present in original file
getdriver = ("https://www.instagram.com/accounts/login/")
driver = webdriver.Chrome(r'C:\testDir\chromedriver_win32\chromedriver.exe')
driver.get(getdriver)
driver.find_element_by_xpath("//input[@name='username']").send_keys(username)
driver.find_element_by_xpath("//input[@name='password']").send_keys(password)
driver.find_element_by_xpath("//button[contains(.,'Log in')]").click()
#working perfectly till here
like = driver.find_element_by_css_selector('.Szr5J.coreSpriteHeartOpen')
#spits error in this line
for x in range(0,len(like)):
if like[x].is_displayed():
like[x].click()
它不断吐出错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".Szr5J.coreSpriteHeartOpen"}
我尝试使用不同的类名模式,但我无法弄清楚如何做到这一点!
任何帮助将不胜感激!
解决方案
尝试以下选项:
# the script is too quick and tries to locate the element before the page is fully loaded. That's why it is useful to use `WebDriverWait`
like = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.Szr5J.coreSpriteHeartOpen')))
或者:
import time
time.sleep(5) # pause 5 sec after login in istagram
like = driver.find_element_by_css_selector('.Szr5J.coreSpriteHeartOpen')
PS如果我正确理解您想在页面上找到所有“心”。因此,您应该driver.find_elements_by_css_selector
像这样使用:
# gives an array of elements found
like = driver.find_elements_by_css_selector('.Szr5J.coreSpriteHeartOpen')
然后你可以使用循环迭代这个元素。
完整的工作代码在这里:
username = "----"
password = "----" #values present in original file
getdriver = ("https://www.instagram.com/accounts/login/")
driver = webdriver.Chrome(r'C:\testDir\chromedriver_win32\chromedriver.exe')
driver.get(getdriver)
driver.find_element_by_xpath("//input[@name='username']").send_keys(username)
driver.find_element_by_xpath("//input[@name='password']").send_keys(password)
driver.find_element_by_xpath("//button[contains(.,'Log in')]").click()
# after login there is a popup which should be closed
popup = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//div/div/button[contains(., Close)]')))
driver.find_element_by_xpath("//div/div/button[contains(., Close)]").click()
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '.Szr5J.coreSpriteHeartOpen')))
# find all 'hearts' presented on the page
likes = driver.find_elements(By.CSS_SELECTOR, ".Szr5J.coreSpriteHeartOpen")
print(len(likes))
print("WORKS")
for x in range(0,len(likes)):
if likes[x].is_displayed():
likes[x].click()
print(x)
输出:
3
WORKS
0
1
2
推荐阅读
- google-apps-script - 比较 2 列的脚本,如果两个谷歌表格之间匹配,则复制值,
- php - SilverStripe 作曲家升级
- ffmpeg - HTML5 H264 视频有时不显示
- vba - vba中的面向对象编程和卷影复制问题
- r - 无法在 R 中安装 Plotly
- reactjs - 如果单条数据发生变化,React 会重新渲染组件吗?
- here-api - 在 HERE MAP REST API 中获取 VEHICLE_TYPES 描述
- sql-server - 为什么当我更新未包含在索引中的视图值时,视图上的聚集索引会更新并重新排序?
- javascript - 将 onchange 脚本内联到外部 JS
- machine-learning - 您如何使用 sklearn 模型对新观察结果进行预测?