Files
statdx/topics_playwright.html
T
Ross 491fca2f42 Add Playwright-based scraping and login scripts for STATdx
- Implemented `statdx_play_chrome.py` to launch Chrome via Playwright, allowing for headful browsing and capturing XHR requests.
- Created `statdx_playwright.py` for headless scraping of the STATdx application, including automatic login and HTML saving.
- Developed `statdx_requests.py` for form-based login and scraping, providing a fallback for sites using traditional authentication.
- Added example HTML output from Playwright scraping to `topics_playwright.html`.
- Captured XHR request data in JSON format for analysis in `xhr_captured/app.statdx.com_csrf_token_8000d0ed_20251014T124122Z.json`.
2025-10-14 13:46:39 +01:00

55 lines
11 KiB
HTML

<!DOCTYPE html><html class="headerFooterPageContainer"><head><title>STATdx | Diagnostic Decision Support for Radiology</title><meta name="description" content="STATdx is used to analyze a complex or unusual case, examine a diagnosis in an unfamiliar subspecialty area, teach trainees, and support tumor boards."><!-- mockAuthenticationEnabled: --><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="icon" href="/apple-touch-icon.png"><link rel="stylesheet" href="/auth-vendor/font-awesome/css/font-awesome.css?v=BCCA10A2"><link rel="stylesheet" href="/auth-vendor/bootstrap/dist/css/bootstrap.min.css?v=F56B0F33"><link rel="stylesheet" href="/css/auth-statdx.css?v=7.1.0"><script async="" src="https://cdn.pendo.io/agent/static/556ee283-e5a0-48b9-6c08-60f0306626d4/pendo.js"></script><script type="text/javascript" src="/js/auth-config.js?v=AA4A5D09"></script><script type="text/javascript" src="/auth-vendor/requirejs/require.js?v=2935D724"></script><script type="text/javascript" src="/auth-vendor/jquery/dist/jquery.min.js?v=3D1D8B85"></script><script type="text/javascript" src="/js/authErrorHandler.js?v=4A02FB8A"></script><script type="text/javascript" src="/js/trimInput.js?v=0637C99F"></script><script type="text/javascript" src="/js/jqueryModify.js?v=938D5434"></script><script>var App = {};
App.unknownError = "An unexpected error has occurred. Please contact customer support.";
</script><script type="text/javascript" src="/js/authLogin.js?v=F7D48248"></script><script type="text/javascript" src="/js/passwordToggle.js?v=615B8C8C"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="views/AuthErrorHandlerView" src="/js/views/AuthErrorHandlerView.js?v=1757595692173"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="views/TrimInputView" src="/js/views/TrimInputView.js?v=1757595692173"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="views/AuthLoginView" src="/js/views/AuthLoginView.js?v=1757595692173"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="views/PasswordToggleView" src="/js/views/PasswordToggleView.js?v=1757595692173"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="views/MessageView" src="/js/views/MessageView.js?v=1757595692173"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="backbone" src="/auth-vendor/backbone/backbone.js?v=1757595692173"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="authTemplates" src="/js/authTemplates.js?v=1757595692173"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="pug" src="/auth-vendor/pug-runtime.js?v=1757595692173"></script><script type="text/javascript" charset="utf-8" async="" data-requirecontext="_" data-requiremodule="lodash" src="/auth-vendor/lodash/lodash.js?v=1757595692173"></script></head><body><div id="container"><div id="header"><div class="header"><a class="marketingReferenceSelector imageLink" href="https://www.us.elsevierhealth.com/statdx.html" target="_blank"><div class="loginLogo"></div></a></div></div><div id="content"><div class="loginPanelSelector loginPanelContainer"><div class="panel"><div class="subPanel"><h1>Sign in</h1><form class="loginFormSelector" method="post" onsubmit="return false;"><input type="hidden" name="_csrf" value="188a7d350a7d0207746137c8608abe3235216fb6fbbae3eb7c9c5b4a8e04c1a8850746c74dd2b73502775ba199cfa2e59192792e1decf5a3ef02960b7a45786b880dd1779b24f35eaec445aeaf80ae17e38f5923f4924ddb51dbda21cb029be3a7d6a2e16a98bdf21b09da338942a616e1e864350fcac6ba048afd2b3e7e5e9e"><div class="fieldpair"><label>Email</label><input class="usernameSelector" type="text" name="username" autocomplete="username"></div><div class="fieldpair"><label>Password</label><span class="passwordCriteria passwordCriteriaSelector dropdown"><span class="fa fa-question-circle dropdown-toggle"></span><div class="dropdown-menu" aria-labelledby="dropdownMenuButton"><div><strong>Password must contain:</strong></div><ul class="passwordRequirementsList passwordRequirementsListSelector"><li><span class="password-requirement__length-status pw-status-indicator passwordCheckLenghtSelector"></span><span class="password-requirement__length pw-requirement">8 characters minimum</span></li><li><span class="password-requirement__upper-case-status pw-status-indicator passwordCheckUpperSelector"></span><span class="password-requirement__upper-case pw-requirement">1 uppercase character</span></li><li><span class="password-requirement__one-number-status pw-status-indicator passwordCheckNumberSelector"></span><span class="password-requirement__one-number pw-requirement">1 number</span></li><li><span class="password-requirement__lower-case-status pw-status-indicator passwordCheckLowerSelector"></span><span class="password-requirement__lower-case pw-requirement">1 lowercase character</span></li><li><span class="password-requirement__special-character-status pw-status-indicator passwordCheckSpecialSelector"></span><span class="password-requirement__special-character pw-requirement">1 special character (like !@#$%)</span></li></ul></div></span><div class="password-input-container auto-generated"><input class="passwordSelector" type="password" name="password" autocomplete="current-password"><div class="fa fa-eye fa-lg password-reveal auto-generated"></div></div></div><div class="forgot"><p><a class="forgotSelector" href="/forgot">Forgot password?</a></p></div><div class="button-bar"><button class="primary submitSelector" type="submit">Sign in</button></div></form><!-- authMessagesPartial--><div class="messageContainer messageContainerSelector errorMessage" role="status" style="display: block;"><div class="messageText messageTextSelector" role="status">Please provide an email.</div></div></div><div class="centerColumn"></div><div class="subPanel"><h3>Get started with STATdx</h3><div class="list"><ul class="signInMethods"><li><i class="fa fa-angle-right"></i><a class="qa-purchasePricingSelfLink" href="https://www.us.elsevierhealth.com/statdx.html" target="_blank">Purchase for yourself</a></li><li><i class="fa fa-angle-right"></i><a class="qa-purchasePricingInstitutionLink" href="https://www.elsevier.com/solutions/statdx/get-started" target="_blank">Purchase for institution</a></li><li><i class="fa fa-angle-right"></i><a class="haveCodeSelector" href="/redeem">Redeem a registration ID</a></li><li><i class="fa fa-angle-right"></i><a class="applyRemoteAccessSelector" href="/remoteAccess">Apply for remote access</a></li></ul></div></div></div><!-- supportCenter--><div class="supportCenter supportCenterSelector">We're here if you need help. Visit the <a class="supportCenterLinkSelector" href="https://service.elsevier.com/app/home/supporthub/statdx/" target="_blank">STATdx Support Center</a>.</div></div></div><div id="footer"><div class="footer clearfix"><div class="footer-lft"><div class="footer-els-logo"><a class="imageLink" id="elsLogo" href="https://www.elsevier.com" target="_blank"><img src="/img/ElsevierLogo.svg?v=5ECD33E4" alt="Elsevier"></a></div></div><div class="footer-mid"><div class="footer-link-row"><a id="contactUs" href="https://service.elsevier.com/app/contact/supporthub/statdx/" target="_blank">Contact Us</a><a id="store" href="https://www.us.elsevierhealth.com/statdx.html" target="_blank">Store</a><a id="eula" href="https://www.elsevier.com/legal/elsevier-website-terms-and-conditions" target="_blank">Terms and Conditions</a><a id="licenseAgreement" href="https://www.elsevier.com/legal/elsevier-registered-user-agreement" target="_blank">Registered User Agreement</a><a id="privacyPolicy" href="https://www.elsevier.com/legal/privacy-policy" target="_blank">Privacy Policy</a><a id="help" href="https://service.elsevier.com/app/home/supporthub/statdx/" target="_blank">Help</a></div><div>Copyright © <span id="copyrightYear">2025</span> Elsevier, Inc., its licensors, and contributors. All rights are reserved,
including those for text and data mining, AI training, and similar technologies.<br>Cookies are used by this site. To decline or learn more, visit our <a id="cookies" href="https://www.elsevier.com/legal/use-of-cookies" target="_blank">Cookies page</a>.</div></div><div class="footer-rgt"><div class="footer-relx-logo"><a class="imageLink" id="relx" href="https://www.relx.com" target="_blank"><img src="/img/RelexLogo.svg?v=92836732" alt="RELXGroup"></a></div></div></div></div><!-- using Pendo: 556ee283-e5a0-48b9-6c08-60f0306626d4 --><script>(function (p, e, n, d, o) {
var v, w, x, y, z;
o = p[d] = p[d] || {};
o._q = [];
v = ['initialize', 'identify', 'updateOptions', 'pageLoad'];
for (w = 0, x = v.length; w < x; ++w)(function (m) {
o[m] = o[m] || function () {
o._q[m === v[0] ? 'unshift' : 'push']([m].concat([].slice.call(arguments, 0)));
};
})(v[w]);
y = e.createElement(n);
y.async = !0;
y.src = 'https://cdn.pendo.io/agent/static/556ee283-e5a0-48b9-6c08-60f0306626d4/pendo.js';
z = e.getElementsByTagName(n)[0];
z.parentNode.insertBefore(y, z);
})(window, document, 'script', 'pendo');
// Call this whenever information about your visitors becomes available
// Please use Strings, Numbers, or Bools for value types.
pendo.initialize({
apiKey: '556ee283-e5a0-48b9-6c08-60f0306626d4',
visitor: {
id: '', // Required if user is logged in
isTrial: '',
groupId: '',
'Department ID' : '',
'Department Name' : '',
'Account ID': '',
'Account Name': ''
// role: // Optional
// You can add any additional visitor level key-values here,
// as long as it's not one of the above reserved names.
},
account: {
groupId: '',
id: '',
'Department ID': '',
'Department Name': '',
'Account ID': '',
'Account Name': ''
// planLevel: // Optional
// planPrice: // Optional
// creationDate: // Optional
// You can add any additional account level key-values here,
// as long as it's not one of the above reserved names.
}
});</script></div><script defer="" src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon="{&quot;rayId&quot;:&quot;98e653a9faa11239&quot;,&quot;version&quot;:&quot;2025.9.1&quot;,&quot;serverTiming&quot;:{&quot;name&quot;:{&quot;cfExtPri&quot;:true,&quot;cfEdge&quot;:true,&quot;cfOrigin&quot;:true,&quot;cfL4&quot;:true,&quot;cfSpeedBrain&quot;:true,&quot;cfCacheStatus&quot;:true}},&quot;token&quot;:&quot;35784c86c62e4771bcaf2b0358c22bdf&quot;,&quot;b&quot;:1}" crossorigin="anonymous"></script>
</body></html>