所以我们有一个内部网站,为我们的特权用户生成密码。我想通过使用python来自动化这个函数。 网站是这样的:
- loginUrl = 'https://internal.website.local/self/j_security_check'
resLogin = session.post(loginUrl, data = {'j_username': 'myusername' ,'j_password': 'mypassword', 'submitbut': 'Log In','command': 'submit','browserDate': '1576177981845','browserOffset': '240','browserTimeZone_2005': '0:240','browserTimeZone_2006': '0:240','browserTimeZone_2007': '0:240','browserTimeZone_2008': '0:240','browserTimeZone_2009': '0:240','browserTimeZone_2010': '0:240','browserTimeZone_2011': '0:240','browserTimeZone_2012': '0:240','browserTimeZone_2013': '0:240','browserTimeZone_2014': '0:240','browserTimeZone_2015': '0:240'})
登录后的第二页: -登录后,我们有很多链接的页面。我们使用名为UseCredential.do的页面
MainCredential = 'https://internal.website.local/self/UseCredential.do'
CredentialDo = session.get(MainCredential, verify=False)
<input type="button" name="searchButton" value="Search" onclick="return submitForm('UseCredentialForm','search');" onmouseover="onMouseOverButtonHandler(this);" onmouseout="onMouseOutButtonHandler(this);" onblur="onMouseOutButtonHandler(this);" onfocus="onMouseOverButtonHandler(this);" id="searchButton" class="button button-primary " alt="Search">
Furthermore it also a script
<script>
function onKeyPress(e) {
if(e && e.keyCode === 13){
e.preventDefault();
submitForm('UseCredentialForm','search');
}
}
</script>
CredentialDo2 = session.post(MainCredential, data = {'searchResourceCondInput':'','searchCredentialCondInput':'','command': 'search','linkRow': ''})
<div class="tableCellContent" title="MyUserName2">
<a
href="javascript:submitTableLink('UseCredentialForm','selectSharedAccount','a73e0a84_0')"
><span class="pim-credential-name">MyUserName2</span>
<span class=""></span>
</a>
</div>
</td>
观察:javascript a73e0a84_0中的值在最后总是变化的。我可以看到这个值在post中传递。 请注意,上述地址栏中的链接并没有从“https://internal.website.local/self/UseCredential.do”更改。 任何和所有的帮助将非常感谢。 这是我第一次用Python编程,所以请耐心听我说。 问题来源StackOverflow 地址:/questions/59386700/new-to-python-trying-to-create-a-small-python-script-to-extract-password-from-a
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Python中自动化与网页的交互,尤其是涉及登录和后续页面操作时,通常会用到requests
库来发送HTTP请求,以及可能用到BeautifulSoup
或Selenium
来解析和操作DOM(文档对象模型)。根据你的描述,你已经使用了requests
库进行登录和获取数据。对于动态生成的JavaScript值处理,如果requests
不能直接解决(因为它不执行JavaScript),你可能需要考虑使用Selenium
。
安装Selenium: 首先确保安装了Selenium库,可以通过pip安装:
pip install selenium
下载WebDriver: Selenium需要一个WebDriver来与浏览器交互。根据你使用的浏览器下载对应的WebDriver(如ChromeDriver)并确保其路径已添加到系统PATH中。
编写代码: 以下是一个基本示例,展示如何使用Selenium模拟登录过程,并获取动态生成的JavaScript值:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
# 初始化WebDriver实例
driver = webdriver.Chrome()
try:
# 打开登录页面
driver.get(loginUrl)
# 输入用户名和密码
username_field = driver.find_element_by_name('j_username')
password_field = driver.find_element_by_name('j_password')
username_field.send_keys('myusername')
password_field.send_keys('mypassword')
# 提交登录表单
submit_button = driver.find_element_by_name('submitbut')
submit_button.click()
# 等待页面加载完成
time.sleep(5) # 根据实际情况调整等待时间
# 导航到UseCredential.do页面
driver.get(MainCredential)
# 执行搜索操作前,可以检查页面是否完全加载,或者直接尝试执行post操作
# 假设你需要点击某个按钮或执行某些操作以触发那个动态值的生成
# search_button = driver.find_element_by_name('command') # 请根据实际页面结构调整选择元素的方式
# search_button.click()
# 获取动态值,这里假设动态值最终出现在某个元素的属性中,比如某个div的data-value属性
# element_with_dynamic_value = driver.find_element_by_css_selector('#elementId') # 请替换为实际的选择器
# dynamic_value = element_with_dynamic_value.get_attribute('data-value')
# 这里只是示例,具体实现需根据实际页面结构和元素定位进行调整
finally:
# 完成后关闭浏览器
driver.quit()
请注意,上述代码中的元素定位方法(如find_element_by_name
, find_element_by_css_selector
等)需要根据目标网站的实际HTML结构进行调整。如果你需要从页面上提取特定信息,Selenium提供了丰富的API来与DOM元素互动。
由于你提到的javascript值是动态生成的,且requests
无法处理JavaScript执行后的结果,因此采用Selenium是更合适的选择。希望这能帮助你解决问题!如果有进一步的具体问题,比如如何精确地定位和提取那个动态值,请提供更多的页面细节。