python - Selenium Python : Can't Get Path To Chat Element On Google Hangouts

标签 python css selenium

最近我在使用 python 中的 selenium 模块时遇到了很多麻烦。我正在尝试制作一个脚本,可以根据其中一位 friend 的请求自动向他们发送消息。

我可以使用它登录 Google Hangouts,但在访问聊天时遇到相当大的困难。如果我想点击一个对话来打开聊天窗口,我想我可以使用selenium的find_element_by_id()函数来选择id。

但是,这不起作用,因为环聊使用动态 ID,这些 ID 会在某些事件发生后发生变化。我真的不知道该怎么办。我尝试使用 xpath 但也不起作用。我真的不知道此时该做什么,因为我所做的一切似乎都不起作用。

如果您想自己重现此内容,则必须获取 chromedriver 并输入路径。您还必须将自己的电子邮件和密码输入到正确的 send_keys() 函数中。

from selenium import webdriver
import time

# get browser set up
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
browser = webdriver.Chrome(options=options,
                           executable_path=r"chromedriver path")
browser.get('https://stackoverflow.com/users/login')

# locate and click sign in button on stackoverflow (can't sign in on regular google)
google_button = browser.find_element_by_class_name('s-btn__google')
google_button.click()
email_elem = browser.find_element_by_id('identifierId')
email_elem.send_keys('email')
next_button = browser.find_element_by_id('identifierNext')
next_button.click()
# enters password 
while True:
    try:
        pwd_elem = browser.find_element_by_css_selector('input[type = "password"]')
        pwd_elem.send_keys('password')
        break
    except:
        time.sleep(1)
next_button = browser.find_element_by_id("passwordNext")
next_button.click()
while True:
    try:
    # gets to hangouts
        browser.execute_script('''window.open("https://hangouts.google.com/", "_blank");''')
        browser.switch_to.window(browser.window_handles[-1])
        break
    except:
        time.sleep(1)
refreshed = False
while True:
    try:
        # CAN'T FIND PATH TO CHAT
        chat = browser.find_element_by_xpath('/html/body/div/div/div/div/div[2]/div/div/div[2]/div/div/div/div/div[1]/div[1]/div/div[1]')
        chat.click()
        break
    except:
        print('not found')
        if not refreshed:
        # refreshes because hangouts will first load without signing in
            browser.refresh()
            refreshed = True
        time.sleep(4)

最佳答案

你的元素在框架内,你需要先切换:

browser.switch_to.frame(browser.find_element_by_class_name('Xyqxtc'))

chat = browser.find_element_by_xpath('/html/body/div/div/div/div/div[2]/div/div/div[2]/div/div/div/div/div[1]/div[1]/div/div[1]')
chat.click()

但不建议使用绝对路径,它很容易改变。

以下定位器看起来更好:

chat = browser.find_element_by_css_selector('div.MM')

关于python - Selenium Python : Can't Get Path To Chat Element On Google Hangouts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62707729/

相关文章:

Python - 在 Tkinter 标签中插入新行

python - Python 中的心理实验(使用/Django) - 如何移植到交互式网络应用程序?

python - virtualenv 未指向本地可执行文件

php - 在php中设置图片的宽度和高度

css - 调整背景图像不同的桌面屏幕尺寸

python - 访问列表中对象的属性

html - 修复了 div 上的背景图像在 iOS 设备上不起作用的问题? [里面的 JSFiddle]

java - Customwait - 使用 selenium webdriver 检查元素是否可见/消失(元素在 DOM 中,但不可见)

java - 如何使用 @BeforeSuite 注释通过 Selenium + TestNG 运行多个浏览器 session (并行执行)

python - 类型错误 : 'module' object is not callable while opening chrome browser using selenium webdriver