WhatsApp与Selenium的Web自动化无法正常工作

时间:2017-02-04 23:39:58

标签: python selenium whatsapp

我发现this python script on github通过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 个答案:

答案 0 :(得分:1)

我意识到这篇文章比较老,但似乎仍然经常被关注。 @ vhad01的按键解释很有意义但对我没用。

一个简单的脏方法对我有用: 将input()替换为

import time
time.sleep(25)

而25是在代码进一步执行之前等待的秒数。 (15也应该足以扫描QR码,......)。

答案 1 :(得分:1)

我执行QR码扫描的方法是检测页面上是否存在搜索栏。

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秒后超时。

答案 2 :(得分:0)

这一行:

input()

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

答案 3 :(得分:0)

我正在编写一个硒脚本来计划我的消息,然后遇到了你的问题。是的,问题在于input()行。 代替使用input():

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

Time.sleep()使您即使在扫描后也要等待。该脚本将完全停止直到指定的秒数。

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

我对whatsapp_login()和QR扫描使用了另一种方法。要查看我的回购链接:https://github.com/shauryauppal/PyWhatsapp

您也想要这种方法。

答案 4 :(得分:0)

一种更好的方法是扫描命令行中的QR码命中回车,然后继续处理您的代码。

browser = webdriver.Firefox()
browser.get('https://web.whatsapp.com/')
print('Please Scan the QR Code and press enter')
input()

这就是您所需要的,也不是适用于此问题的模糊逻辑。