我对Selenium还是很陌生,但是这个错误只会让我震惊。 我正在尝试编写一个机器人,以在我的Instagram feed中的前10张照片上单击“赞”按钮。我只是从Chrome复制并粘贴了“赞”按钮的XPath,但是由于某种原因,该XPath无法使用。
代码如下:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep, strftime
from random import randint
sleep(3)
for x in range(1,10):
button_like = webdriver.find_element_by_xpath('//*[@id="react-root"]/section/main/section/div[2]/div[1]/div/article[{}]/div[2]/section[1]/span[1]/button/span'.format(x))
button_like.click()
sleep(randint(2,3))
这是该部分的HTML,其中包含我要点击的按钮。
<section class="ltpMr Slqrh">
<span class="FY9nT fr66n">
<button class="dCJp8 afkep _0mzm-">
<span class="glyphsSpriteHeart__filled__24__red_5 u-__7" aria-label="Unlike"></span>
</button>
</span>
<span class="_15y0l">
<button class="dCJp8 afkep _0mzm-">
<span class="glyphsSpriteComment__outline__24__grey_9 u-__7" aria-label="Comment"></span>
</button></span>
<span class="_5e4p">
<button class="dCJp8 afkep _0mzm-">
<span class="glyphsSpriteShare__outline__24__grey_9 u-__7" aria-label="Share Post"></span>
</button>
</span>
<span class="wmtNn">
<button class="dCJp8 afkep _0mzm-">
<span class="glyphsSpriteSave__outline__24__grey_9 u-__7" aria-label="Save"></span>
</button>
</span>
</section>
这是我收到的错误消息:
回溯(最近通话最近): 在第33行中输入文件“ / Users / JoshSong / Desktop /喜欢朋友的Photos.py” button_like = webdriver.find_element_by_xpath('// [@ id =“ react-root”] / section / main / section / div [2] / div [1] / div / article [{}] / div [2 ] / section [1] / span [1] /button/span'.format(x)) 在find_element_by_xpath中的第394行中,文件“ /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py” 返回self.find_element(by = By.XPATH,value = xpath) 文件“ /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py”,行978,在find_element中 'value':value})['value'] 在执行的文件“ /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py”中,第321行 self.error_handler.check_response(响应) 文件“ /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py”,第242行,在check_response中 引发exception_class(消息,屏幕,堆栈跟踪) selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ // [@ id =” react-root“] / section / main / section / div [2] / div [1] / div / article [1] / div [2] / section [1] / span [1] / button / span“} (会话信息:chrome = 76.0.3809.100)
答案 0 :(得分:0)
我们需要更多的HTML才能充分回答问题。例如,使用您提供的解决方案将是:
like_button = driver.find_element_by_xpath("//span[@class='FY9nT fr66n']/button")
like_button.click()
基于提供的HTML,这将单击第一个按钮(实际上是您提供的“与众不同”按钮,但我假设“喜欢”按钮在那里)。如果您想要的每个“喜欢”按钮周围的span元素具有相同的类,则只需进行少量修改即可:
like_buttons = driver.find_elements_by_xpath("//span[@class='FY9nT fr66n']/button")
#create maxIndex of the lesser of the length, or the max index you want to press
maxIndex = MIN(9, len(like_buttons))
for i in range (0, maxIndex):
like_buttons[i].click()
此解决方案应该起作用,假设每个“赞”按钮周围的span元素相同,并且该类不会在页面上未包装“赞”按钮的其他span元素上重用。如果您更新HTML并违反了这些假设,我将很乐意查看新的解决方案
答案 1 :(得分:-1)
当尝试使用带索引的路径时,我遇到类似的问题。我建议使用:// span [@ aria-label ='Like']。我没有将硒与python一起使用,但我假设有一个使用索引作为参数的find方法。因此,您可以使用它来打第一个like元素,然后打第二个,依此类推(但是从instagram网站上看来,一次只能检测到7个)