无法在Hotmail中使用Python绑定的Selenium WebDriver输入邮件正文文本

0 投票
5 回答
2752 浏览
提问于 2025-04-17 09:21

我有一个测试脚本,之前一直能正常工作,但在两周前就不行了。这个测试是登录Hotmail,点击新邮件,填写邮箱地址、主题和邮件正文,然后发送邮件。目前我无法在邮件正文中输入文字。我尝试了用ID、CSS和Xpath来定位元素,也试过使用选择框架,但都没有成功。我附上了Python代码,希望能得到帮助……

这个脚本的目的是通过Wireshark捕获Hotmail发送邮件的网络流量,特别是当前的Hotmail协议。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
import unittest, time, re

class HotmailloginpythonWebdriver(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.base_url = "https://login.live.com/"
        self.verificationErrors = []

    def test_hotmailloginpython_webdriver(self):
        driver = self.driver
        driver.get(self.base_url + "/login.srf?wa=wsignin1.0&rpsnv=11&ct=1321965448&rver=6.1.6206.0&wp=MBI&wreply=http:%2F%2Fmail.live.com%2Fdefault.aspx&lc=1033&id=64855&mkt=en-us&cbcxt=mai&snsc=1")
        driver.find_element_by_id("i0116").clear()
        driver.find_element_by_id("i0116").send_keys("address@hotmail.com")
        driver.find_element_by_id("i0118").clear()
        driver.find_element_by_id("i0118").send_keys("password")
        driver.find_element_by_id("idSIButton9").click()
        driver.find_element_by_id("h_inboxCount").click()
        driver.find_element_by_id("NewMessage").click()
        driver.find_element_by_id("AutoCompleteTo$InputBox").clear()
        driver.find_element_by_id("AutoCompleteTo$InputBox").send_keys("address@hotmail.com")
        driver.find_element_by_id("fSubject").clear()
        driver.find_element_by_id("fSubject").send_keys("testsubject")
        driver.find_element_by_css_selector("body..RichText").clear()
        driver.find_element_by_css_selector("body..RichText").send_keys("gggggggggggg")
        driver.find_element_by_id("SendMessage").click()
        driver.find_element_by_id("c_signout").click()

    def is_element_present(self, how, what):
        try:
            self.driver.find_element(by=how, value=what)
        except NoSuchElementException, e:
            return False
        return True

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
    unittest.main()

5 个回答

0

试着调试一下这个脚本,看看在输入密码的时候是否正常。

driver.find_element_by_id("idSIButton9").click()

这样可以检查一下它是否运行得很好。也许微软(MS)改变了他们的界面,所以从这个地方开始调试你的应用,看看是否需要修改你的脚本来更新对象的ID。

祝好。

0

我觉得这可能跟浏览器的“ cookies”有关。你是不是把浏览器里的 cookies 删除了?

1

很有可能,微软正在阻止一些自动化服务(比如Selenium)访问Hotmail或live.com页面。根据微软的服务条款(TOS),你可以使用自动化服务来登录等。以下是服务条款中第2点的内容:

你不能使用该服务来伤害他人或服务本身。例如,你不能用这个服务来伤害、威胁或骚扰其他人、组织或微软。你不能:损坏、禁用、过度使用或影响服务(或任何与服务连接的网络);转售或重新分发服务或其任何部分;使用任何未经授权的方式修改、重定向或获取服务,或者尝试进行这些活动;或者使用任何自动化过程或服务(比如机器人、爬虫、定期缓存微软存储的信息,或元搜索)来访问或使用该服务。

完整的条款可以在这里查看:http://windows.microsoft.com/en-US/windows-live/microsoft-service-agreement.

我自己也有过类似的经历,当时是在测试Twitter的界面。也许你可以寻找一些第三方服务,通过SMTP或POP3等方式帮助你登录,以便测量网络流量,而不是使用前端界面。

撰写回答