WhatsApp Web自动化测试使用Selenium无法正常工作

3
我在Github上找到了一个Python脚本,可以通过Selenium自动发送WhatsApp Web消息。 这是链接
#https://www.github.com/iamnosa
#Let's import the Selenium package
from selenium import webdriver

#Let's use Firefox as our browser
web = webdriver.Firefox()
web.get('http://web.whatsapp.com')
input()

#Replace Mr Kelvin with the name of your friend to spam
elem = web.find_element_by_xpath('//span[contains(text(),"Mr Kelvin")]')
elem.click()
elem1 = web.find_elements_by_class_name('input')
while True:
    elem1[1].send_keys('hahahahahahaha')
web.find_element_by_class_name('send-container').click()

尽管它原本是用于垃圾邮件的,但我试图将其改为有益的目的,但脚本似乎无法正常工作。它并没有通过WhatsApp Web发送消息,而只是加载了一个QR身份验证屏幕,然后在我用手机进行身份验证后什么也没发生。
你知道为什么会出现这种情况吗?我正在Firefox上运行最新版本的Selenium WebDriver,geckodriver已经提取到了/usr/bin/。
5个回答

3
我知道这篇文章已经有些年头了,但似乎仍然经常被查看。 @vhad01的按键说明是有道理的,但对我没有用。 一个简单而不太好的解决方法适用于我: 将input()替换为

import time
time.sleep(25)

25是等待代码进一步执行的秒数(15秒也足以扫描QR码...)。


2
我实现扫描二维码的方法是通过检测页面上是否存在搜索栏。"Original Answer"翻译成"最初的回答"。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


chatlist_search = ".jN-F5.copyable-text.selectable-text"

web.get("https://web.whatsapp.com")
WebDriverWait(web, 60).until(EC.visibility_of_element_located((By.CSS_SELECTOR, chatlist_search)))

这将等待聊天搜索栏在页面上呈现,或者在60秒后超时。最初的回答保留html标签。

0

我正在编写一个Selenium脚本来安排我的消息,然后我看到了你的问题。是的,问题就在于input()行。 不要使用input():

使用time.sleep(),毫无疑问它会起作用,但更好的方法是使用implicit_wait(15)

Time.sleep()会让你等待扫描完成后再继续执行。脚本会完全停止,直到给定的秒数结束。

在implicit_wait()中,如果元素在指定时间之前出现,则脚本将开始执行,否则脚本将抛出NoSuchElementException异常。

我使用了一种更不同的方法来进行whatsapp_login()和QR扫描。要查看我的repo链接:https://github.com/shauryauppal/PyWhatsapp

你也会喜欢这种方法的。


0

这一行:

input()

正在等待按键以继续。 扫描后只需按任意键即可。


0
更好的方法是在命令行中扫描QR码,然后继续进行您的代码。
browser = webdriver.Firefox()
browser.get('https://web.whatsapp.com/')
print('Please Scan the QR Code and press enter')
input()

这就是你需要的,同时也不是一个很含糊的逻辑来解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接