Я думаю, проблема в том, что скрипт работает слишком быстро. Это не ждет, пока следующая страница не отобразится достаточно быстро. Таким образом, вы должны поставить некоторую задержку там. Предпочтительный способ - использовать неявное ожидание селена, а не time.sleep()
, но у меня не было времени на это разобраться.
Во-вторых, вы можете просто получить данные без селена (см. / Попробуйте второй скрипт ниже):
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
import time
url = 'http://lpse.polri.go.id/eproc4/lelang'
driver = webdriver.Chrome(executable_path="C:/chromedriver_win32/chromedriver.exe")
driver.get(url)
list_kode=[]
for i in range(4): # 4 pages
html_source = driver.page_source
soup = BeautifulSoup(html_source, "html.parser")
for j in range(2): # 2 top item
list_kode.append(soup.findAll("td", class_="sorting_1")[j].text)
driver.find_element_by_xpath('//a[@data-dt-idx="9"]').click()
time.sleep(5)
# click to next page
driver.close()
print (list_kode)
Без селена:
import requests
url = 'http://lpse.polri.go.id/eproc4/lelang'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest'}
s = requests.session()
response = s.get(url, headers=headers)
cookie = s.cookies.get_dict()
cookieKey = list(cookie.keys())[0]
cookieVal = cookie[list(cookie.keys())[0]]
authToken = cookieVal.split('AT=')[-1].split('&')[0]
ts = cookieVal.split('TS=')[-1].split('&')[0]
url = 'http://lpse.polri.go.id/eproc4/dt/lelang'
#'Cookie': list(cookie.keys())[0] + '=' + cookie[list(cookie.keys())[0]]}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
'Cookie': cookieKey + '=' + cookieVal}
list_kode=[]
for i in range(4): # 4 pages
payload = {
'draw': i,
'columns[0][data]': '0',
'columns[0][name]': '',
'columns[0][searchable]': 'true',
'columns[0][orderable]': 'true',
'columns[0][search][value]': '',
'columns[0][search][regex]': 'false',
'columns[1][data]': '1',
'columns[1][name]': '',
'columns[1][searchable]': 'true',
'columns[1][orderable]': 'true',
'columns[1][search][value]': '',
'columns[1][search][regex]': 'false',
'columns[2][data]': '2',
'columns[2][name]': '',
'columns[2][searchable]': 'true',
'columns[2][orderable]': 'true',
'columns[2][search][value]': '',
'columns[2][search][regex]': 'false',
'columns[3][data]': '3',
'columns[3][name]': '',
'columns[3][searchable]': 'false',
'columns[3][orderable]': 'false',
'columns[3][search][value]': '',
'columns[3][search][regex]': 'false',
'columns[4][data]': '4',
'columns[4][name]': '',
'columns[4][searchable]': 'true',
'columns[4][orderable]': 'true',
'columns[4][search][value]': '',
'columns[4][search][regex]': 'false',
'order[0][column]': '0',
'order[0][dir]': 'desc',
'start': i*25,
'length': '25',
'search[value]': '',
'search[regex]': 'false',
'authenticityToken': authToken,
'_': ts}
jsonData = requests.get(url, headers=headers, params=payload).json()
for j in range(2): # 2 top item
list_kode.append(jsonData['data'][j][0])
print (list_kode)