硒 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 时的问题的主要内容,如果未能解决你的问题,请参考以下文章

Python 硒错误处理

不向元素发送密钥,而是向一般硒发送密钥

找不到硒元素下拉菜单python

Python BeautifulSoup 硒刮刀

无法从 Stockx 中找到元素(硒 python)

如何等到硒python中的元素可用