【问题标题】:Python and seleniumrequests getting request headersPython 和 seleniumrequests 获取请求标头
【发布时间】:2017-07-24 07:45:45
【问题描述】:

我需要从特定请求中获取 cookie。问题是它在我的眼睛之外生成,我需要使用 Selenium 来模拟浏览器打开,这样我就可以自己生成它。第二个问题是我无法访问请求 cookie。我需要的 cookie 在请求中,而不是响应中。

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

binary = FirefoxBinary('/usr/bin/firefox')
driver = webdriver.Firefox(firefox_binary=binary)
driver.get('http://www.princess.com/find/searchResults.do')
driver.find_elements_by_xpath('//*[@id="LSV010"]/div[3]/div[1]/div[1]/button')[0].click()

此代码块打开页面并在第二个结果中单击“查看所有日期和定价”链接。 cookie 是由浏览器发送的,而不是作为响应发送的。我得去拿那块饼干。如果他们能完成这项工作,其他图书馆也可以。 如果您手动转到该页面,这就是我需要的东西: 我已经选择了我需要的请求和 Cookie,因为它显示它在请求中而不是响应中。这有可能实现吗?

【问题讨论】:

  • 所以你想检查cookies?
  • 浏览器发送的请求中的cookie。 .click() 调用的 url 是 http://www.princess.com/find/viewAllCruises.do,我需要的 cookie 总是以 _aeu=QCQ=; 开头。
  • 您需要向具有特定cookie的网站发送请求,还是要检查cookie?你的要求是什么。抱歉,这真的很令人困惑。
  • 是的,我需要发送由 lick i click() 触发的请求,并带有我无法生成的特定 cookie。

标签: python selenium cookies python-requests


【解决方案1】:

我发现这是如何完成的。使用selenium 库我确实设法让它工作:

def fix_header():
    browser = webdriver.Firefox(executable_path='geckodriver.exe', firefox_profile=profile)
    browser.get('https://www.princess.com/find/searchResults.do')
    browser.find_element_by_xpath(
        "//*[@class='expand-table view-all-link util-link plain-text-btn gotham-bold']")
    WebDriverWait(browser, 60).until(EC.visibility_of_any_elements_located(
        (By.XPATH, "//*[@class='expand-table view-all-link util-link plain-text-btn gotham-bold']")))
    try:
        browser.find_element_by_xpath(
            "//*[@class='expand-table view-all-link util-link plain-text-btn gotham-bold']").click()
    except Exception:
        browser.find_element_by_class_name('mfp-close').click()
        browser.find_element_by_xpath(
            "//*[@class='expand-table view-all-link util-link plain-text-btn gotham-bold']").click()

    cookies = browser.get_cookies()
    browser.close()
    chrome_cookie = ''
    for c in cookies:
        chrome_cookie += c['name']
        chrome_cookie += '='
        chrome_cookie += c['value']
        chrome_cookie += "; "
    return chrome_cookie[:-2]

Selenium 实际上会进入页面并使用浏览器“点击”我需要的url 并获取所需的 cookie。

【讨论】:

  • 把它变得漂亮一点chrome_cookie = '; '.join(["{}:{}".format(c['name'], c['value']) for c in cookies])
猜你喜欢
  • 1970-01-01
  • 2022-08-07
  • 2011-03-07
  • 2016-03-21
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
相关资源
最近更新 更多