使用mechanizepython隐藏HTML元素

2024-04-20 02:13:51 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在编写一个Python脚本来检查Blackboard(学校界面站点)的更新。但我从脚本中收到的HTML与在浏览器中查看时的HTML不完全相同。我不确定这是饼干问题还是我遗漏了什么。在

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看起来像这样(这是来自脚本)

^{pr2}$

我期待它的样子(来自Chrome/actual browser)

<span id="badgeTotal" style="visibility: visible;" title="">
<span class="hideoff" id="badgeAXLabel">Activity Updates</span>
<span class="badge" id="badgeTotalCount" title="">1</span>

我真正想要的是最后一行中的“1”,但我觉得visibility属性阻碍了它。请注意,我从Mechanize获得的cookies与在浏览器中获得的cookie相同。(不完全相同,但id、名称等相同。)

有什么想法吗?在

感谢您的任何意见。在


Tags: browserform脚本idhtmlusernamesite浏览器
1条回答
网友
1楼 · 发布于 2024-04-20 02:13:51

非常确定有javascript涉及which mechanize cannot handle。在

这里的另一种解决方案是通过^{}使真正的浏览器自动化:

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)

相关问题 更多 >