@@ -21,7 +21,7 @@ class Printer:
21
21
self .session .verify = False
22
22
self .server = server
23
23
self .logged_in = False
24
- self .version = 3
24
+ self .version = 4
25
25
26
26
def __enter__ (self ):
27
27
self .session .__enter__ ()
@@ -34,19 +34,19 @@ class Printer:
34
34
35
35
def log_in (self , password ):
36
36
"""Logs in to the printer and returns whether that succeeded."""
37
-
37
+ resp = self .session .get ('https://' + self .server +
38
+ '/hp/device/SignIn/Index' )
39
+ tree = lxml .html .fromstring (resp .content )
40
+ token = tree .get_element_by_id ("CSRFToken" )
38
41
resp = self .session .post ('https://' + self .server +
39
42
'/hp/device/SignIn/Index' ,
40
- data = {'agentIdSelect' : 'hp_EmbeddedPin_v1' ,
43
+ data = {'CSRFToken' : token ,
44
+ 'agentIdSelect' : 'hp_EmbeddedPin_v1' ,
41
45
'PinDropDown' : 'AdminItem' ,
42
46
'PasswordTextBox' : password })
43
- if '<h2>Sign In failed</h2>' in resp . text or '<h2>Sign -In failed</h2>' in resp .text :
47
+ if '<h2>Sign-In failed</h2>' in resp .text :
44
48
return False
45
49
else :
46
- if 'HP Development Company, L.P.' in resp .text :
47
- self .version = 4
48
- else :
49
- self .version = 3
50
50
self .logged_in = True
51
51
return True
52
52
@@ -61,7 +61,7 @@ class Printer:
61
61
form option name -> form option value."""
62
62
63
63
resp = self .session .get ('https://' + self .server +
64
- '/hp/device/MenuTree/IndexForm?id=PrintQuality ' )
64
+ '/hp/device/DefaultPrintOptions/Index ' )
65
65
tree = lxml .html .fromstring (resp .content )
66
66
opts = {}
67
67
for select_elem in tree .xpath ('//form//select' ):
@@ -88,27 +88,19 @@ class Printer:
88
88
raise ValueError ('You must log in first' )
89
89
if setting not in ('On' , 'Off' ):
90
90
raise ValueError ('setting must be "On" or "Off"' )
91
- if self .version == 3 :
92
- opts = self .get_print_quality_opts ()
93
- opts ['Economode__mEconomodeListBox' ] = setting
94
- opts ['FormButtonSubmit' ] = 'OK'
95
- resp = self .session .post ('https://' + self .server +
96
- '/hp/device/MenuTree/IndexForm?id=PrintQuality' ,
97
- data = opts )
98
- return '<h2>The operation was executed successfully.</h2>' in resp .text
99
- elif self .version == 4 :
100
- token = self .get_csrf_token ().value
101
- density = 2 if setting == 'On' else 3
102
- opts = {}
103
- opts ['CSRFToken' ] = token
104
- opts ['TonerDensityBlack' ] = density
105
- opts ['ResolutionEnhancementTechnology' ] = "on"
106
- opts ['FormButtonSubmit' ] = 'Apply'
107
- print (opts )
108
- resp = self .session .post ('https://' + self .server +
109
- '/hp/device/PrintQuality/Save' ,
110
- data = opts )
111
- return '<h2>The operation was completed successfully.</h2>' in resp .text
91
+ token = self .get_csrf_token ().value
92
+ opts = self .get_print_quality_opts ()
93
+ opts ['CSRFToken' ] = token
94
+ opts ['NumberOfCopies' ] = '1'
95
+ opts ['XDimension' ] = '12.28'
96
+ opts ['YDimension' ] = '18.5'
97
+ opts ['UseInches' ] = 'on'
98
+ opts ['PrintQualityMode' ] = 'Economode' if setting == 'On' else 'Normal'
99
+ opts ['FormButtonSubmit' ] = 'Apply'
100
+ resp = self .session .post ('https://' + self .server +
101
+ '/hp/device/DefaultPrintOptions/Save' ,
102
+ data = opts )
103
+ return '<h2>The operation was completed successfully.</h2>' in resp .text
112
104
113
105
114
106
def main ():
0 commit comments