Skip to content

Commit

Permalink
corrected slider bug and implemented position tracking
Browse files Browse the repository at this point in the history
  • Loading branch information
dheimgartner committed Oct 1, 2022
1 parent 6d0f82d commit c54338c
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
34 changes: 18 additions & 16 deletions src/tcsscraper/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
SLIDER_MIN = 5e3
SLIDER_MAX = 50e3
SLIDER_START = 15e3
SLEEP = 0.5



Expand All @@ -35,7 +36,7 @@ def tick(self, verbose=False):



def load_dynamic_table(driver, sleep=0.5, verbose=False):
def load_dynamic_table(driver, sleep=SLEEP, verbose=False):
end = EndOfTable(driver)
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
Expand Down Expand Up @@ -124,7 +125,7 @@ class Slider:
"""Acts on handle
"""

def __init__(self, driver, slider_handle, step_size=[5, 1e3], min=SLIDER_MIN, max=SLIDER_MAX, start=SLIDER_START):
def __init__(self, driver, slider_handle, step_size=[5, 1e3], min=SLIDER_MIN, max=SLIDER_MAX, position=SLIDER_START):
"""Manipulate slider object
Args:
Expand All @@ -133,32 +134,33 @@ def __init__(self, driver, slider_handle, step_size=[5, 1e3], min=SLIDER_MIN, ma
step_size (list, optional): 5 pix == 1000km. Defaults to [5, 1e3].
min (int, optional): Slider lower bound. Defaults to SLIDER_MIN.
max (int, optional): Slider upper bound. Defaults to SLIDER_MAX.
start(int, optional): Slider initial position. Defaults to SLIDER_START.
position(int, optional): Current position of the slider. Defaults to SLIDER_START.
"""
self.driver, self.slider_handle, self.step_size, self.min, self.max, self.start = driver, slider_handle, step_size, min, max, start
self.driver, self.slider_handle, self.step_size, self.min, self.max, self.position = driver, slider_handle, step_size, min, max, position

def compute_offset(self, target, start):
diff = target - start
def compute_offset(self, target):
if target < self.min:
raise Exception("Target < min of slider range")
diff = target - self.position
step = int(diff / self.step_size[1])
offset = step * self.step_size[0]
return offset

def drag_and_drop_by_offset(self, x):
## by pixels...
ActionChains(self.driver).drag_and_drop_by_offset(self.slider_handle, x, 0).perform()
time.sleep(SLEEP)

def move_to_target_from_position(self, target, position):
offset = self.compute_offset(target, position)
def move_to_target(self, target):
offset = self.compute_offset(target)
self.drag_and_drop_by_offset(x=offset)
## update position
self.position = target

def reset_slider(self, position=None):
if position is None:
position = self.start
self.move_to_target_from_position(target=self.min, position=position)

def reset_and_move(self, target):
self.reset_slider()
self.move_to_target_from_position(target=target, position=self.start)
def reset_slider(self):
self.move_to_target(target=self.min)
## update position
self.position = self.min



5 changes: 3 additions & 2 deletions src/tcsscraper/scrape.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@


TIMEOUT = 60
SLEEP = 0.5


def get_base_table(headless=True, verbose=False):
Expand Down Expand Up @@ -73,7 +74,7 @@ def scrape_one_car(driver, car, km, canton, verbose=False):
popup = car.find_element(By.CSS_SELECTOR, "td")
driver.execute_script("arguments[0].click();", popup)

time.sleep(0.5)
time.sleep(SLEEP)

xpath = "//div[@id='lightbox-content']"

Expand Down Expand Up @@ -103,7 +104,7 @@ def scrape_one_car(driver, car, km, canton, verbose=False):
shandle = wait_variable.until(lambda d: d.find_element(By.XPATH, "//div[@id='popup_slider1']/span"))

slider = Slider(driver, shandle)
slider.reset_and_move(target=km)
slider.move_to_target(target=km)

costs = wait_variable.until(lambda d: d.find_element(By.XPATH, "//div[@id='tco-box']"))
car_costs = costs.text.split("\n")
Expand Down

0 comments on commit c54338c

Please sign in to comment.