{{ v.name }}
{{ v.cls }}类
{{ v.price }} ¥{{ v.price }}
selenium很好使用,下面写了三个函数,分别用来:
login_163()–>登陆163邮箱(手动点击验证码)login_qzone()–>登陆qq空间(快捷登录)login_sina_post()–>登陆新浪邮箱并发送邮件
其中发送邮件部分,忙活了大半天,各种百度,总算解决。遇到不少经典问题,在后面列出。
#测试selenium的使用#有些网页需要登陆才能打开fromseleniumimportwebdriverfromselenium.webdriver.common.keysimportkeysfromselenium.webdriver.common.action_chainsimportactionchainsfromselenium.webdriver.support.uiimportwebdriverwaitfromselenium.webdriver.supportimportexpected_conditionsasecfromselenium.common.exceptionsimportelementnotvisibleexceptionimporttime#自动访问浏览器,模拟登陆163邮箱---问题,需要点击验证码--手动输入deflogin_163():driver=webdriver.chrome()driver.get('http://mail.163.com/')#设置等待时间,等待页面加载之后再操作time.sleep(3)#frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,需先跳转到iframe框架driver.switch_to_frame('x-urs-iframe')#设置等待时间,等待页面加载之后再操作time.sleep(3)elem_user=driver.find_element_by_name('email')elem_user.clear()elem_user.send_keys('账号')elem_pwd=driver.find_element_by_name('password')elem_pwd.clear()elem_pwd.send_keys('密码')elem_pwd.send_keys(keys.return)time.sleep(10)driver.find_element_by_id("dologin").click()#driver.find_element_by_id("dologin").submit()#driver.close()#driver.quit()#使用快捷登陆,不用输入验证码deflogin_qzone():driver=webdriver.chrome()driver.get('http://i.qq.com/')driver.switch_to_frame('login_frame')time.sleep(3)driver.find_element_by_id('img_out_qq号').click()#driver.quit()#模拟登录新浪邮箱(没有验证码)发送邮件deflogin_sina_post():driver=webdriver.chrome()print('打开网页')#driver=webdriver.phantomjs()driver.set_window_size(1120,550)driver.get('http://mail.sina.com.cn/?from=mail#')time.sleep(2)print('输入账号及密码')elem_user=driver.find_element_by_id('freename')elem_user.clear()elem_user.send_keys('账号')elem_pwd=driver.find_element_by_id('freepassword')elem_pwd.clear()elem_pwd.send_keys('密码')driver.find_element_by_class_name('loginbtn').click()#waitingfortime.sleep(3)#通过属性定位元素driver.find_element_by_css_selector("a[_act='navigate'][_appid='writer']").click()time.sleep(3)print('输入收件人')#通过类名定位收件人,主题#selenium.common.exceptions.webdriverexception:message:unknownerror:cannotfocuselement#解决上述问题->需要移动鼠标elem_address=driver.find_element_by_class_name('wui-addrinput')action_a=actionchains(driver)action_a.move_to_element(elem_address).click().send_keys('收件人邮箱').send_keys(keys.return).perform()print('输入主题')#报错①message:invalidselector:compoundclassnamesnotpermitted#有两个类名不能用空格,前后都要用.#②selenium.common.exceptions.elementnotvisibleexception:message:elementnotvisible#driver.execute_script("window.scrollby(0,200)","")#向下滚动200px#driver.execute_script("window.scrollby(0,document.body.scrollheight)","")#向下滚动到页面底部#解决,使用name定位driver.find_element_by_name('subj').send_keys('test')print('输入邮件内容')#切换到写信部分所在框架#frame没有name,id时的定位方法elem_frame=driver.find_element_by_class_name('iframe')driver.switch_to_frame(elem_frame)#sina邮箱比较特殊driver.find_element_by_xpath('//body').send_keys('thisisjustatestbasedonselenium')print('点击发送')#跳出当前框架进行发送#driver.switch_to.parent_content()->attributeerror:'switchto'objecthasnoattribute'parent_content'driver.switch_to.default_content()driver.find_element_by_class_name('mailpubtext').click()time.sleep(1)print('发送成功')driver.quit()login_sina_post()
相关问题:①设置等待时间,等待页面加载之后再操作
②报错1)selenium.common.exceptions.webdriverexception:message:unknownerror:cannotfocuselement解决:
elem_address=driver.find_element_by_class_name('wui-addrinput')action_a=actionchains(driver)action_a.move_to_element(elem_address).click().send_keys('18846080950@163.com').send_keys(keys.return).perform()
详情参考(中间详细讲了几种可能)
2)message:invalidselector:compoundclassnamesnotpermitted解决:有两个类名不能用空格,前后都要用.
3)selenium.common.exceptions.elementnotvisibleexception:message:elementnotvisible存在frame,要切换到该frame中才能找到最后要记得跳出frame可以参考python+selenium定位不到元素常见原因及解决办法(报:nosuchelementexception)
driver.switch_to_frame('login_frame')