【问题标题】:i had problem with selenium x path i make Facebook sharing script but he is not clicking share how can i fix this? i'm using python我在制作 Facebook 分享脚本时遇到了 selenium x 路径问题,但他没有点击分享,我该如何解决?我正在使用蟒蛇
【发布时间】:2019-07-24 19:35:55
【问题描述】:

当我执行 Facebook 分享按钮时遇到问题,它做得很好,但没有点击 Facebook 分享按钮,请帮助我!

这是我的视频,你可以在这里看到>> https://photos.app.goo.gl/Pi1tRQTwhqg5tmpn9

这里是元素 HTML 代码:

这里是这个元素代码:

<span class="_18vi"><a class=" _2nj7 _18vj _18vk" data-ft="{ &quot;tn&quot;: &quot;J&quot;, &quot;type&quot;: 25 }" href="/ajax/sharer/?s=22&amp;appid=25554907596&amp;id=1816791348467451&amp;p[0]=130584170421519&amp;p[1]=1816792805133972&amp;sharer_type=all_modes&amp;av=130584170421519" rel="dialog" role="button" tabindex="0" title="Send this to friends or post it on your timeline.">Share</a></span>

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time


driver = webdriver.Chrome()
driver.get("https://www.facebook.com/")
driver.maximize_window()
phone=WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='email']"))).send_keys("03460522942")
time.sleep(2)
pas=WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='pass']"))).send_keys("......")
time.sleep(.5)
login=WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='loginbutton']"))).click()
time.sleep(.5)
#Searc
search=WebDriverWait(driver, 100).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/form[1]/div[1]/div[1]/div[1]/div[1]/input[2]"))).send_keys("lunch.pk")
search2=WebDriverWait( driver, 100).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/form[1]/button[1]"))).click()
click_page=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/div[1]/div[3]/div[1]/div[1]/div[3]/div[2]/div[1]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/a[1]/span[1]"))).click()
click_photos=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/div[1]/div[3]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[3]/div[3]"))).click()
click_banner=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/div[1]/div[3]/div[1]/div[1]/div[1]/div[2]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/a[1]/img[1]"))).click()
click_Share=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u_1b_2']/div[2]/div/div[2]/div/span[3]/a/text()"))).click()

这是我的错误:

Traceback (most recent call last):
  File ".\facebook.py", line 24, in <module>
    click_Share=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u_1b_2']/div[2]/div/div[2]/div/span[3]/a/text()"))).click()
  File "C:\Users\Hamza Lachi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\wait.py", line 71, in until
    value = method(self._driver)
  File "C:\Users\Hamza Lachi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 297, in __call__
    element = visibility_of_element_located(self.locator)(driver)
  File "C:\Users\Hamza Lachi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 128, in __call__
    return _element_if_visible(_find_element(driver, self.locator))
  File "C:\Users\Hamza Lachi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\support\expected_conditions.py", line 148, in _element_if_visible

AttributeError: 'NoneType' object has no attribute 'is_displayed'

return element if element.is_displayed() == visibility else False

【问题讨论】:

  • 能否请您也粘贴此元素的 HTML?
  • 好的!这是这个元素代码: 分享
  • 这是我的视频,你可以在这里看到>> photos.app.goo.gl/Pi1tRQTwhqg5tmpn9
  • @HamzaMirchi 从 cmets 读取 html 代码很困难,请在问题中更新。
  • @SRM21 我更新了请检查并帮助我!

标签: python selenium selenium-webdriver xpath selenium-chromedriver


【解决方案1】:

我测试了您的问题(在 MacOS Mojave 上)并成功点击了 facebook 上的分享按钮: 解决方案:代码执行时点击两次click_Share

click_Share=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u_1b_2']/div[2]/div/div[2]/div/span[3]/a/text()"))).click()
click_Share=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u_1b_2']/div[2]/div/div[2]/div/span[3]/a/text()"))).click()

我认为这个问题可能是一些与 Facebook 相关的一次性问题。大多数网站上的可点击元素只需单击一下即可。

更新答案:

您也可能获取了错误的 XPATH,请替换您的代码行:

click_Share=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u_1b_2']/div[2]/div/div[2]/div/span[3]/a/text()"))).click()

用这一行:

click_Share=WebDriverWait( driver, 50).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='u_g_2']/div[2]/div/div[2]/div/span[3]"))).click()

另请注意:

Facebook 可能会在用户上传图像时动态创建新的 XPATH,因此如果 CSS_SELECTOR 是静态的位置按钮,则应该使用该方法而不是 XPATH

【讨论】:

  • 在我的情况下让我试试,他没有点击让我尝试两次谢谢!
  • 我了解用户不是双击,但这是获得所需结果的解决方案。
  • 兄弟还是不行这个脚本可以在你的电脑上运行吗?
  • 您使用哪种浏览器?
  • 我正在使用 chrome。回家后我可以试试 Windows 10。
【解决方案2】:

尝试使用 javascriptExecutor

shareButton= driver.find_element_by_xpath("//your/xpath/here//")
driver.execute_script("arguments[0].click();", shareButton)

【讨论】:

  • 请分享轨迹
  • 文件 ".\facebook.py",第 24 行,在 中 shareButton= driver.find_element_by_xpath("///*[@id='u_g_2']/div[2]/div /div[2]/div/span[3]") 文件“C:\Users\Hamza Lachi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver. py",第 394 行,在 find_element_by_xpath 中返回 self.find_element(by=By.XPATH, value=xpath)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多