用例:
使用 pythonanywhere 发送自动 WhatsApp 消息。分步逻辑如下:
非编码人员在 gsheet 上写下我们应该拨打的电话号码 发送消息
读取gsheet数据(使用pythonanywhere中的gspread)
打开WhatsApp URL批量发送消息
我的机器上运行着一段使用 selenium 的代码,该代码打开 Web Whatsapp 网址,在网站上查找所需的元素,并将消息发送到 gsheets 电话号码 - 在下面找到我正在使用的那部分代码的片段在我的机器上:
global driver
driver.get('https://web.whatsapp.com/')
waiter.until(EC.title_is("WhatsApp"))
waitCounter = 0
while 1:
try:
waiter.until(EC.presence_of_element_located((By.XPATH, "//canvas[@aria-label='Scan me!']")))
waitCounter+=1
if waitCounter%1000 == 0:
print("Waiting for user to log in...", 'WARNING')
except:
print("Logged in to WhatsApp")
break
for entry in data:
driver.find_element_by_xpath(PHONE_NUMER_INPUT).send_keys(str(entry['PhoneNumber']))
time.sleep(2)
driver.find_element_by_xpath(PHONE_NUMER_INPUT).send_keys(Keys.ENTER)
time.sleep(2)
driver.find_element_by_class_name('p3_M1').send_keys(str(entry['Message']))
time.sleep(2)
driver.find_element_by_class_name('_4sWnG').click()
time.sleep(2)
疑问:
为了完成第 3 步,在任何地方使用 python 工作,我都必须使用无头浏览器。然而,要启动 Whatsapp Web,我们总是需要扫描二维码,所以我无法这样做。在下面找到我的代码的当前(无用)部分以及无头硒代码 - (
NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='side']/div[1]/div/label/div/div[2]"}
)。我被困在这里了。任何克服这个问题的技巧或想法都非常受欢迎,并且很乐意使用你们可能认为合适的其他库讨论任何可能的解决方案。
提前致谢。
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
driver = webdriver.Chrome(options=chrome_options)
def send_whatsapp_message():
global driver
driver.get('https://web.whatsapp.com/')
print("Done updating, check the spreadsheet now")
#redirect('https://web.whatsapp.com/', code=302)
for entry in data:
driver.find_element_by_xpath("//*[@id='side']/div[1]/div/label/div/div[2]").send_keys(str(entry['PhoneNumber']))
time.sleep(2)
driver.find_element_by_xpath("//*[@id='side']/div[1]/div/label/div/div[2]").send_keys(Keys.ENTER)
time.sleep(2)
driver.find_element_by_class_name('p3_M1').send_keys(str(entry['Message']))
time.sleep(2)
driver.find_element_by_class_name('_4sWnG').click()
time.sleep(2)
print("Successfully send message to {0}, name: {1}".format(str(entry['PhoneNumber']), str(entry['Name'])), 'INFO')
你有没有解决这个问题我也被困在这里我希望它在无头浏览器中运行