因此,我正在编写一个Python脚本,用于检查Blackboard(学校界面网站)是否有更新。但是我从脚本中收到的HTML与在浏览器中查看时的HTML不完全相同。我不确定这是Cookie还是缺少的内容。
USERNAME = ''
PASSWORD = ''
updates = 0
site = 'http://schoolsite.edu'
browser = mechanize.Browser()
browser.open(site)
browser.select_form(nr = 0)
browser.form['j_username'] = USERNAME
browser.form['j_password'] = PASSWORD
browser.submit()
#it brings back an empty form, just submit it.
browser.select_form(nr = 0)
browser.submit()
html_resp = browser.response().read()
有问题的HTML看起来像这样(来自脚本)
<span id="badgeTotal" style="visibility: hidden" title="">
<span class="hideoff" id="badgeAXLabel">Activity Updates</span>
<span class="badge" id="badgeTotalCount" title=""></span>
我所期望的外观(从Chrome /实际浏览器)
<span id="badgeTotal" style="visibility: visible;" title="">
<span class="hideoff" id="badgeAXLabel">Activity Updates</span>
<span class="badge" id="badgeTotalCount" title="">1</span>
我真正想知道的是最后一行中的数字“ 1”,但我感觉像能见度属性使它退缩了。请注意,我从Mechanize中获得的Cookie与在浏览器中获得的相同。(不完全相同,但ID,名称等相同)
有什么想法吗?
任何输入表示赞赏。
可以肯定的是,涉及到 机械化无法处理的javascript。
这里的替代解决方案是通过以下方式自动化真正的浏览器selenium
:
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox() # could also be headless: webdriver.PhantomJS()
driver.get('http://schoolsite.edu')
# submit a login form
username = driver.find_element_by_name('j_username')
password = driver.find_element_by_name('j_password')
username.send_keys(USERNAME)
password.send_keys(PASSWORD)
username.submit()
# wait for the badge count to appear
badge_count = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "badgeTotalCount")))
print(badge_count.text)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句