将会话ID从Selenium传递到Python请求

时间:2018-03-04 23:36:12

标签: python python-3.x selenium selenium-webdriver python-requests

100%Python noob,所以如果我使用的任何术语或短语不正确或含糊不清,我会道歉

我正在尝试去一个随机单词生成器网站,刷新默认生成的随机单词,刷新后抓取网站,摄取单词,按字母顺序排序,然后打印预排序和后排序列表到屏幕。

这是网址网址:https://www.randomlists.com/random-words

我使用的是最新版本的Python 3.x,它附带了Requests,我使用Pip安装了Selenium。

以下是我能够成功完成的事情:

  1. 使用Selenium将刷新命令传递到网站并生成新的单词列表
  2. 使用请求从网站上删除默认字词。
  3. 按字母顺序对默认单词列表进行排序
  4. 将预先排序和后排序的默认单词列表打印到屏幕
  5. 以下是我不想做的事情:

    1. 使用Selenium从默认
    2. 刷新网站
    3. 然后使用请求从网站上删除刷新的字词
    4. 然后按字母顺序排序并打印到屏幕上,进行预排序和后排序。
    5. 我发现原因是Selenium和Requests都使用自己的“实例”,由网站的会话ID表示。

      所以(最后)这是我的问题 - 我如何将使用Selenium刷新的网站中的捕获的会话ID传递给请求,然后我使用它来刷新刷新的单词列表而不是默认的单词列表?

      围绕此问题的所有主题都涉及将用户名和密码登录会话从一个传递到另一个,这不是我在这里尝试做的。如果已经提出这个问题,我很抱歉 - 我今天花了几个小时进行研究,但是没有找到任何与我的具体情况有关的事情。

      非常乐意在必要时发布我当前代码的副本。

      谢谢!

      修改以添加以下代码

      options = webdriver.ChromeOptions()
      options.add_argument('--ignore-certificate-errors')
      options.add_argument("--test-type")
      options.binary_location = "/usr/bin/chromium"
      driver = webdriver.Chrome(executable_path=r"REDACTED")
      url = 'https://www.randomlists.com/random-words'
      driver.get(url)
      
      refresh_button = driver.find_elements_by_xpath("//input[@name='submit' and 
      @value='Refresh']")[0]
      refresh_button.click()
      
      rawList = []
      sortedList= []
      url = 'https://www.randomlists.com/random-words'
      r = requests.get(url)
      tree = lxml.html.fromstring(r.content)
      elements = tree.get_element_by_id('result')
      for el in elements:
          rawList.append(el.text_content())
      
      print("This is the unsorted list:", "\n")
      for i in rawList:
          print(i)
      
      print("\n")
      print("This is the sorted list:", "\n")
      for i in rawList:
          sortedList.append(i)
      sortedList.sort()
      for i in sortedList:
          print(i)
      

1 个答案:

答案 0 :(得分:0)

  

我正在尝试去一个随机单词生成器网站,刷新默认生成的随机单词,刷新后抓取网站,摄取单词,按字母顺序排序,然后打印预排序和后排序列表到了屏幕。

我不确定这是一项作业还是其他任何事情,必须以这种特定的方式完成,但可能有一种更简单的方法。看看该网站上的请求,我找到了他们似乎从中随机选择的所有单词的JSON链接。现在,它们似乎没有排序,但就像在返回的数据上调用sorted(...)一样简单。

>>> import requests
... 
... url = 'https://www.randomlists.com/data/words.json'
... r = requests.get(url)
... r.raise_for_status()
... all_words = r.json()['data']
>>> len(all_words)
2643
>>> all_words == sorted(all_words)
False
>>> sorted_words = sorted(all_words)