1
+ from selenium import webdriver
2
+ from selenium .webdriver .support .ui import WebDriverWait
3
+ from selenium .webdriver .common .by import By
4
+ from selenium .webdriver .support import expected_conditions as EC
5
+ import time
6
+ import sys
7
+
8
+ class MediaExpert :
9
+ def __init__ (self , settings ):
10
+ if settings is not None :
11
+ self .data = settings
12
+ self .driver_path = settings .get_driver_path ()
13
+ self .product_link = settings .get_link ()
14
+ self .is_for_company = settings .is_for_company ()
15
+ self .wait_time = settings .get_wait_for_element ()
16
+ else :
17
+ raise ValueError ('there is no settings specified!' )
18
+
19
+ def open_browser (self ):
20
+ try :
21
+ print ('opening browser...' )
22
+ self .driver = webdriver .Firefox (executable_path = r'D:\portable_programs\geckodriver\geckodriver.exe' )
23
+ # item_to_open = sys.argv[1]
24
+ print ('opened browser: ' + self .product_link )
25
+ self .driver .get (self .product_link )
26
+ except Exception as e :
27
+ print ('error while opening browser!' , e )
28
+
29
+ def add_to_cart (self ):
30
+ try :
31
+ print ('looking for buying option...' )
32
+ button = self .driver .find_elements_by_css_selector ('div.c-offerBox_addToCart a' )[1 ]
33
+ WebDriverWait (self .driver , self .wait_time ).until_not (EC .visibility_of_element_located ((By .CLASS_NAME , 'c-modal_container ps is-modalContVisible' )))
34
+ button .click ()
35
+ print ('going to cart...' )
36
+ time .sleep (2 )
37
+ self .driver .get ('https://www.mediaexpert.pl/koszyk/lista' )
38
+ print ('cart opened!' )
39
+ except Exception as e :
40
+ print ('error while adding to cart!' , e )
41
+
42
+ def select_delivery (self ):
43
+ try :
44
+ print ('selecting delivery...' )
45
+ time .sleep (1 )
46
+ #zaznaczenie dostawy
47
+ delivery = self .driver .find_elements_by_css_selector ('div.c-cart_transportWrapper input#cart_flow_list_step_transportMethod_3' )[0 ]
48
+ self .driver .execute_script ("arguments[0].click();" , delivery )
49
+ print ('delivery selected!' )
50
+ except Exception as e :
51
+ print ('error while selecting delivery!' , e )
52
+
53
+ def select_payment (self ):
54
+ try :
55
+ #zaznaczenie platnosci
56
+ print ('payment selecting...' )
57
+ # payment = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'div.c-cart_paymentWrapper input#cart_flow_list_step_paymentGroup_35')))
58
+ print ('payment selected!' )
59
+ except Exception as e :
60
+ print ('error while selecting payment!' )
61
+
62
+ def login (self ):
63
+ try :
64
+ go_further = WebDriverWait (self .driver , self .wait_time ).until (EC .visibility_of_element_located ((By .CSS_SELECTOR , 'a.c-btn.is-primary.is-big.is-submitBtn' )))
65
+ self .driver .execute_script ("arguments[0].click()" , go_further )
66
+
67
+ # logowanie
68
+ print ('selecting login method...' )
69
+ without_login = WebDriverWait (self .driver , self .wait_time ).until (EC .visibility_of_element_located ((By .CSS_SELECTOR , 'div.c-group_row.is-guestBtn a' )))
70
+ without_login .click ()
71
+ print ('login skipped - as guest' )
72
+ except Exception as e :
73
+ print ('error while login!' , e )
74
+
75
+ def fill_form (self , data ):
76
+ try :
77
+ if self .is_for_company == True :
78
+ print ('filling company form...' )
79
+ self .driver .find_elements_by_css_selector ('div.a-form_row.is-orderAs label' )[1 ].click ()
80
+ company_name = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_company' )[0 ]
81
+ company_name .send_keys (data .get_company_name ())
82
+ nip = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_nip' )[0 ]
83
+ nip .send_keys (data .get_nip ())
84
+ else :
85
+ print ('filling form...' )
86
+ firstName = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_firstName' )[0 ]
87
+ firstName .send_keys (data .get_first_name ())
88
+ surname = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_lastName' )[0 ]
89
+ surname .send_keys (data .get_last_name ())
90
+
91
+ mail = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_email' )[0 ]
92
+ mail .send_keys (data .get_mail ())
93
+ street = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_street' )[0 ]
94
+ street .send_keys (data .get_street ())
95
+ house = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_houseNumber' )[0 ]
96
+ house .send_keys (data .get_house_number ())
97
+ apartment = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_apartmentNumber' )[0 ]
98
+ apartment .send_keys (data .get_apartment_number ())
99
+ postcode = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_postcode' )[0 ]
100
+ postcode .send_keys (data .get_postcode ())
101
+ city = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_city' )[0 ] ## error
102
+ city .send_keys ('' )
103
+ phone = self .driver .find_elements_by_id ('cart_flow_address_step_accountAddress_phone' )[0 ]
104
+ phone .send_keys (data .get_phone_number ())
105
+ check = self .driver .find_elements_by_id ('cart_flow_address_step_consentForm_consent_332' )[0 ]
106
+ self .driver .execute_script ("arguments[0].click();" , check )
107
+ print ('form filled!' )
108
+
109
+ # time.sleep(1) #retrying selecting city
110
+ # city = driver.find_elements_by_id('cart_flow_address_step_accountAddress_city')[0] ## error
111
+ # city.send_keys('Katowice')
112
+ time .sleep (1 )
113
+ except Exception as e :
114
+ print ('error while filling form!' , e )
115
+
116
+ def go_to_summary (self ):
117
+ try :
118
+ #przejscie dalej do kalendarza
119
+ # driver.find_elements_by_css_selector('div.c-calendar_contentRow a')[0]
120
+ go_further_calendar = WebDriverWait (self .driver , self .wait_time ).until (EC .visibility_of_element_located ((By .CSS_SELECTOR , 'button.c-btn.is-primary.is-big' )))
121
+ self .driver .execute_script ("arguments[0].click()" , go_further_calendar )
122
+ print ('date chosen!' )
123
+
124
+ #przejscie dalej do podsumowania
125
+ go_further = WebDriverWait (self .driver , self .wait_time ).until (EC .visibility_of_element_located ((By .CSS_SELECTOR , 'a.c-btn.is-primary.is-big' )))
126
+ self .driver .execute_script ("arguments[0].click()" , go_further )
127
+ except Exception as e :
128
+ print ('error while going to summary!' , e )
129
+
130
+ def buy (self ):
131
+ try :
132
+ print ("started procedure!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" )
133
+ self .open_browser ()
134
+ self .add_to_cart ()
135
+ self .select_delivery ()
136
+ self .login ()
137
+ self .fill_form (self .data )
138
+ self .go_to_summary ()
139
+ print ('done!' )
140
+ return True
141
+ except :
142
+ return False
143
+ finally :
144
+ print ('ended procedure...' )
145
+ # driver.quit()
0 commit comments