开发者社区 问答 正文

Python新手,尝试创建一个小的Python脚本来从使用javascripts和forms的密码生

所以我们有一个内部网站,为我们的特权用户生成密码。我想通过使用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

展开
收起
kun坤 2019-12-25 21:52:59 435 分享 版权
阿里云 AI 助理回答

在Python中自动化与网页的交互,尤其是涉及登录和后续页面操作时,通常会用到requests库来发送HTTP请求,以及可能用到BeautifulSoupSelenium来解析和操作DOM(文档对象模型)。根据你的描述,你已经使用了requests库进行登录和获取数据。对于动态生成的JavaScript值处理,如果requests不能直接解决(因为它不执行JavaScript),你可能需要考虑使用Selenium

使用Selenium处理动态内容

  1. 安装Selenium: 首先确保安装了Selenium库,可以通过pip安装:

    pip install selenium
    
  2. 下载WebDriver: Selenium需要一个WebDriver来与浏览器交互。根据你使用的浏览器下载对应的WebDriver(如ChromeDriver)并确保其路径已添加到系统PATH中。

  3. 编写代码: 以下是一个基本示例,展示如何使用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是更合适的选择。希望这能帮助你解决问题!如果有进一步的具体问题,比如如何精确地定位和提取那个动态值,请提供更多的页面细节。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答