硒 Python 推特。 HeadLess = True 时的问题
Posted
技术标签:
【中文标题】硒 Python 推特。 HeadLess = True 时的问题【英文标题】:Selenium Python Twitter. Problem when HeadLess = True 【发布时间】:2022-01-13 02:32:12 【问题描述】:我已经完成了下一个功能,将 Twitter 与 Selenium 一起使用。
如果我设置 HeadLess = False,它会完美运行,但是当我设置 HeadLess = True 时,它不会按类找到元素。
一些帮助?
opciones=Options()
opciones.add_experimental_option('excludeSwitches', ['enable-automation'])
opciones.add_experimental_option('useAutomationExtension', False)
opciones.headless=False
def twittear():
url = 'https://twitter.com/login'
driver=webdriver.Chrome(PATH, options=opciones)
driver.get(url)
try:
# cookies
driver.find_element_by_class_name('css-901oao css-16my406 css-bfa6kz r-poiln3 r-a023e6 r-rjixqe r-bcqeeo r-qvutc0'.replace(' ', '.')).click()
time.sleep(1)
except:
None
# Introduzco el mail
time.sleep(10)
driver.find_element_by_class_name('r-30o5oe r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-1dz5y72 r-fdjqy7 r-13qz1uu'.replace(' ', '.')).send_keys(user)
time.sleep(2)
driver.find_element_by_class_name('r-30o5oe r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-1dz5y72 r-fdjqy7 r-13qz1uu'.replace(' ', '.')).send_keys(u'\ue007')
time.sleep(3)
# Introduzco username
driver.find_element_by_class_name('r-30o5oe r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-1dz5y72 r-fdjqy7 r-13qz1uu'.replace(' ', '.')).send_keys(user)
driver.find_element_by_class_name('r-30o5oe r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-1dz5y72 r-fdjqy7 r-13qz1uu'.replace(' ', '.')).send_keys(u'\ue007')
time.sleep(3)
# Introduzco password
driver.find_element_by_class_name('r-30o5oe r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-1dz5y72 r-fdjqy7 r-13qz1uu'.replace(' ', '.')).send_keys(password)
driver.find_element_by_class_name('r-30o5oe r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-1dz5y72 r-fdjqy7 r-13qz1uu'.replace(' ', '.')).send_keys(u'\ue007')
time.sleep(3)
# Twitt
driver.find_element_by_class_name('public-DraftStyleDefault-block public-DraftStyleDefault-ltr'.replace(' ', '.')).send_keys(gift_link)
driver.find_element_by_class_name('css-18t94o4 css-1dbjc4n r-l5o3uw r-42olwf r-sdzlij r-1phboty r-rs99b7 r-19u6a5r r-2yi16 r-1qi8awa r-1ny4l3l r-ymttw5 r-o7ynqc r-6416eg r-lrvibr'.replace(' ', '.')).click()
【问题讨论】:
【参考方案1】:说实话,我很惊讶它能找到元素,无论是否无头,因为 Selenium 不允许通过复合类定位元素。
尝试这样做,看看是否有所作为:
改变这一行:
driver.find_element_by_class_name('r-30o5oe r-1niwhzg r-17gur6a r-1yadl64 r-deolkf r-homxoj r-poiln3 r-7cikom r-1ny4l3l r-t60dpp r-1dz5y72 r-fdjqy7 r-13qz1uu'.replace(' ', '.')).send_keys(user)
到:
driver.find_element_by_xpath('//*[contains(@class, "r-30o5oe") and contains (@class, "r-1niwhzg")]').replace(' ', '.')).send_keys(user)
【讨论】:
我已尝试使用该 XPATH,但它不起作用。我已经完成了 Xpath,它的工作原理与以前的相同。如果我使用 HeadLedd = False,则有效,如果 HeadLess = true。它没有找到元素:【参考方案2】:我已经尝试过使用该 Xpath,但它不起作用。如果我在下面的代码中使用 Xpath,它就可以工作。但它同样发生。 HeadLess = False 时有效,Headless = True 时无效。
def twittear():
url = 'https://twitter.com/login'
driver=webdriver.Chrome(PATH, options=opciones)
driver.get(url)
try:
# cookies
driver.find_element_by_class_name('css-901oao css-16my406 css-bfa6kz r-poiln3 r-a023e6 r-rjixqe r-bcqeeo r-qvutc0'.replace(' ', '.')).click()
time.sleep(1)
except:
None
# Introduzco el mail
time.sleep(10)
driver.find_element_by_xpath('//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[5]/label/div/div[2]/div/input').send_keys(user)
time.sleep(2)
driver.find_element_by_xpath('//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[5]/label/div/div[2]/div/input').send_keys(u'\ue007')
time.sleep(3)
# Introduzco username
driver.find_element_by_xpath('//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[3]/div/label/div/div[2]/div[1]/input').send_keys(user)
driver.find_element_by_xpath('//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[3]/div/label/div/div[2]/div[1]/input').send_keys(u'\ue007')
time.sleep(3)
# Introduzco password
driver.find_element_by_xpath('//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[3]/div/label/div/div[2]/div[1]/input').send_keys(password)
driver.find_element_by_xpath('//*[@id="layers"]/div[2]/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[3]/div/label/div/div[2]/div[1]/input').send_keys(u'\ue007')
time.sleep(3)
# Twitt
driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div[2]/div[1]/div/div/div/div[2]/div[1]/div/div/div/div/div/div/div/div/div/label/div[1]/div/div/div/div/div[2]/div/div/div/div').send_keys(gift_link)
driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div[2]/div[1]/div/div/div/div[2]/div[3]/div/div/div[2]/div[3]/div/span/span').click()
【讨论】:
此外,现在,当功能到达我输入密码并且我进入的点时。Chrome 关闭并且我无法阻止它。:( 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。以上是关于硒 Python 推特。 HeadLess = True 时的问题的主要内容,如果未能解决你的问题,请参考以下文章